|
26464
|
1095
|
41
|
2026-05-12T12:29:54.337431+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588994337_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32912233,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33111703,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3879654,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3899601,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.44680852,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4488032,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5056516,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.50764626,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.56449467,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56648934,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.62333775,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6253325,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6821808,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.68417555,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
app_switch
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26677
|
NULL
|
0
|
2026-05-12T12:55:19.792905+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590519792_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpRetro - Platfo SlackFileEditViewGoHistoryWindowHelpRetro - Platform - in 1h 5 mБГsshDOCKER• 81DEV (-zsh)О ₴2APP (-zsh)• *[EMAIL]@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data $ cd ..[EMAIL] $ nasAdm1n@DXP4800PLUS-B5F8: ~$cd/volumel/screenpipe/Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipes 1ltotal26Gdrwxrwxrwx+1rootroot410 May1215:15drwxr-xr-xrootroot450 Apr2519:39drwxrwxrwx+1Adminadmin202 Apr2620:10drwxrwxrwx+1Adminadmin298 May1013:46drwxrwxrwx+Adminadmin144 May09:41drwxrwxrwx+1Admin admin70 May1013:47drwxrwxrwx+1Adminadmin164 Apr1116:51drwxrwxrwx+1rootroot5.1KMay1120:55-rwxrwxrwx+1rootroot31Apr1817:42app_settings.json1Adminadmin13G May1120:55archive.db-rwxrwxrwx+1Adminadmin11G May10-rwxrwxrwx+Adm1n admin 3.5G May1112:31archive.db-bak20:15db.sqlite-rwxrwxrwx+1Admin admin32K May1205:48db.sqlite-shm-rwxrwxrwx+ 1Admin admin0 Apr 26 17:17db.sqlite-wal1Admin admin11K May 12 09:09.DS_Store-rwxrwxrwx+ 1 Admin admin219 Apr24 19:33•gitignore-rwxrwxrWx+1 Admin admin0 Apr1317:21screenpipe.db-rwxrwxrwx+1 Admin admin 8.4K May12 15:15screenpipe_fts_migrate.sh-rwxrwxrwx+ 1 Admin admin32K May 11 20:48screenpipe_sync.sh-rwxrwxrwx+ 1 Admin admin20K May 10 13:06screenpipe_sync_updated.shAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.dbarchive.db.bak-pre-installidAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipes ./screenpipe_fts_migrate.sh archive.dbScreenpipe FTS migrationDB:archive.dbSize: 13G• ×4-zsh• 285screenpipe"O 886ssh100% <78•Tue 12 May 15:55:1918187-zsh• *8+• Creating install registry_installs table• Om01s• Adding install_id to base tablesvideo_chunksalready presentError: stepping, UNIQUEconstraintfailed: video_chunks.install_id, video_chunks.id (19)Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipes sqlite3 archive.db "SELECT * FROM_installs;"Adm1neDXP4800PLUS-B5F8:/volume1/screenpipes sqlite3 archive.db "SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;"Error: in prepare, no such column: install_idSELECT install_id,COUNT(*) FROM frames GROUP BY install_id;^_-- error hereAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipes |...
|
NULL
|
-4927604559620539748
|
NULL
|
click
|
ocr
|
NULL
|
SlackFileEditViewGoHistoryWindowHelpRetro - Platfo SlackFileEditViewGoHistoryWindowHelpRetro - Platform - in 1h 5 mБГsshDOCKER• 81DEV (-zsh)О ₴2APP (-zsh)• *[EMAIL]@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe/data $ cd ..[EMAIL] $ nasAdm1n@DXP4800PLUS-B5F8: ~$cd/volumel/screenpipe/Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipes 1ltotal26Gdrwxrwxrwx+1rootroot410 May1215:15drwxr-xr-xrootroot450 Apr2519:39drwxrwxrwx+1Adminadmin202 Apr2620:10drwxrwxrwx+1Adminadmin298 May1013:46drwxrwxrwx+Adminadmin144 May09:41drwxrwxrwx+1Admin admin70 May1013:47drwxrwxrwx+1Adminadmin164 Apr1116:51drwxrwxrwx+1rootroot5.1KMay1120:55-rwxrwxrwx+1rootroot31Apr1817:42app_settings.json1Adminadmin13G May1120:55archive.db-rwxrwxrwx+1Adminadmin11G May10-rwxrwxrwx+Adm1n admin 3.5G May1112:31archive.db-bak20:15db.sqlite-rwxrwxrwx+1Admin admin32K May1205:48db.sqlite-shm-rwxrwxrwx+ 1Admin admin0 Apr 26 17:17db.sqlite-wal1Admin admin11K May 12 09:09.DS_Store-rwxrwxrwx+ 1 Admin admin219 Apr24 19:33•gitignore-rwxrwxrWx+1 Admin admin0 Apr1317:21screenpipe.db-rwxrwxrwx+1 Admin admin 8.4K May12 15:15screenpipe_fts_migrate.sh-rwxrwxrwx+ 1 Admin admin32K May 11 20:48screenpipe_sync.sh-rwxrwxrwx+ 1 Admin admin20K May 10 13:06screenpipe_sync_updated.shAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.dbarchive.db.bak-pre-installidAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipes ./screenpipe_fts_migrate.sh archive.dbScreenpipe FTS migrationDB:archive.dbSize: 13G• ×4-zsh• 285screenpipe"O 886ssh100% <78•Tue 12 May 15:55:1918187-zsh• *8+• Creating install registry_installs table• Om01s• Adding install_id to base tablesvideo_chunksalready presentError: stepping, UNIQUEconstraintfailed: video_chunks.install_id, video_chunks.id (19)Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipes sqlite3 archive.db "SELECT * FROM_installs;"Adm1neDXP4800PLUS-B5F8:/volume1/screenpipes sqlite3 archive.db "SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;"Error: in prepare, no such column: install_idSELECT install_id,COUNT(*) FROM frames GROUP BY install_id;^_-- error hereAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipes |...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26678
|
NULL
|
0
|
2026-05-12T12:55:19.802292+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590519802_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityMoreClaudtcaltVIewWindowJiminny... v# gene ActivityMoreClaudtcaltVIewWindowJiminny... v# general# jiminny-bg# plattorm-tickets# product launches# random# releases# sofia-office# support# thank-yous#t the people of iimi..o Direct messagesP. Galya Dimitrovao Steliyan Georgievf Petko Kashinski. Aneliya Angelova8. Stefka Stovanovae Vasil Vasilev DNikolay Ivanov3 Aneliva Angelova…Stoyan Taneve Lukas Kovalik v.::: Apps' Jira CloudI& Toast(m) Google Cale.Stoyan TanevMessagesAdd canvaUr FilesThursday. April 16thvn Stoyan Tanev 2:10 PMЯсно, добре ще го имам в предвидWednesday, April 29th vSaved for later • Due 5 days agoStovan lanev 1:02 PMЗлрасти, за този тикет.[URL_WITH_CREDENTIALS] volume1 screenpipes sqlite3 archive.db "SELECT* FROM installs:"Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$salite3 archive.db "SELECT install id. COUNT(*) FROMframes GROUP BY install_id;"Error: in prepare, no such column: install idSELECT install_id, COUNT(*) FROM frames GROUPBY install_id;^--- error hereYou're out of extra usage • Your limit resets at 7:20 PMBuy moreon nas Admin@DxP4800PLUS-B5F8:/volumel/screenpipes sqlitesarchive.do"=-e s-rom installs."Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$sqlite3archive dh "SFI ECT inctall id COUNT(*) EROM frames GROUP RYinctall id."Error: in prepare. no such column: install idSELECT install id. COUNT(*) FROM frames GROUP BY install id:N--- error hereOpus 4.7 Adaptive vClaudo ic Aland can make mictakec Plosce doubla-chketro - Platorm • In 1h om100% 5• Tue 12 May 15:55:19screenplpe res migrate ohcopy174175207speaker 1d UNINDEXED, 1nstall 1d UNINDEXED, sOUrce 1d UNINDEXEDif table exists "frames": thenINSERT INTO frames ftsful text, app name, window name. browser urinstalb id. source id)SELECT fub text.app name. window name, browser un, instabl id.idFROM frames WHERE full text IS NOT NULL AND fuil text e 11.run wich cimer"populate erements tus"INSERT INTO elements fts(text, role, install id, source id, frame idSELECT text, role, install id, id, frame idGPOM elomonte WHEPE toyt TS NOT NIlI.iT caole exists "ul events, chenINSERT INTO U1 events Ttstext content, app name, window title, element name, install 1d, source 1dSELECT text content, app name, window title, element name, install id,FROM u1 events WHERE text content is Not NULL,INSERT INTO audio transcriptions fts(transcription. device, speaker id install id source 1d)SELECT transcription, COALESCE(device,''), speaker_id, install_id, idFROM audio transcrintions WHERE transcrintion IS NOT NULL AND transcriotion le 11.echo "Migration complete.""Final DB size: $(du -sh "$NAS DB" | cut -f1)"echo "Sanity-check queries you can run:"echo "echo"sqlite3 $NAS DB 'SELECT * FROM installs:'"sglite3 $NAS DB \"SELECT sql FROM sglite master WHERE name=' frame:salite3 $NAS DB 'SELECT COUNT(*) FROM frames fts:'*echo"salite3 $NAS DB 'SELECT COUNT(*) FROM audio transcriptions fts:'...
|
NULL
|
-991816822777642121
|
NULL
|
click
|
ocr
|
NULL
|
ActivityMoreClaudtcaltVIewWindowJiminny... v# gene ActivityMoreClaudtcaltVIewWindowJiminny... v# general# jiminny-bg# plattorm-tickets# product launches# random# releases# sofia-office# support# thank-yous#t the people of iimi..o Direct messagesP. Galya Dimitrovao Steliyan Georgievf Petko Kashinski. Aneliya Angelova8. Stefka Stovanovae Vasil Vasilev DNikolay Ivanov3 Aneliva Angelova…Stoyan Taneve Lukas Kovalik v.::: Apps' Jira CloudI& Toast(m) Google Cale.Stoyan TanevMessagesAdd canvaUr FilesThursday. April 16thvn Stoyan Tanev 2:10 PMЯсно, добре ще го имам в предвидWednesday, April 29th vSaved for later • Due 5 days agoStovan lanev 1:02 PMЗлрасти, за този тикет.[URL_WITH_CREDENTIALS] volume1 screenpipes sqlite3 archive.db "SELECT* FROM installs:"Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$salite3 archive.db "SELECT install id. COUNT(*) FROMframes GROUP BY install_id;"Error: in prepare, no such column: install idSELECT install_id, COUNT(*) FROM frames GROUPBY install_id;^--- error hereYou're out of extra usage • Your limit resets at 7:20 PMBuy moreon nas Admin@DxP4800PLUS-B5F8:/volumel/screenpipes sqlitesarchive.do"=-e s-rom installs."Adm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$sqlite3archive dh "SFI ECT inctall id COUNT(*) EROM frames GROUP RYinctall id."Error: in prepare. no such column: install idSELECT install id. COUNT(*) FROM frames GROUP BY install id:N--- error hereOpus 4.7 Adaptive vClaudo ic Aland can make mictakec Plosce doubla-chketro - Platorm • In 1h om100% 5• Tue 12 May 15:55:19screenplpe res migrate ohcopy174175207speaker 1d UNINDEXED, 1nstall 1d UNINDEXED, sOUrce 1d UNINDEXEDif table exists "frames": thenINSERT INTO frames ftsful text, app name, window name. browser urinstalb id. source id)SELECT fub text.app name. window name, browser un, instabl id.idFROM frames WHERE full text IS NOT NULL AND fuil text e 11.run wich cimer"populate erements tus"INSERT INTO elements fts(text, role, install id, source id, frame idSELECT text, role, install id, id, frame idGPOM elomonte WHEPE toyt TS NOT NIlI.iT caole exists "ul events, chenINSERT INTO U1 events Ttstext content, app name, window title, element name, install 1d, source 1dSELECT text content, app name, window title, element name, install id,FROM u1 events WHERE text content is Not NULL,INSERT INTO audio transcriptions fts(transcription. device, speaker id install id source 1d)SELECT transcription, COALESCE(device,''), speaker_id, install_id, idFROM audio transcrintions WHERE transcrintion IS NOT NULL AND transcriotion le 11.echo "Migration complete.""Final DB size: $(du -sh "$NAS DB" | cut -f1)"echo "Sanity-check queries you can run:"echo "echo"sqlite3 $NAS DB 'SELECT * FROM installs:'"sglite3 $NAS DB \"SELECT sql FROM sglite master WHERE name=' frame:salite3 $NAS DB 'SELECT COUNT(*) FROM frames fts:'*echo"salite3 $NAS DB 'SELECT COUNT(*) FROM audio transcriptions fts:'...
|
26676
|
NULL
|
NULL
|
NULL
|
|
26679
|
1107
|
0
|
2026-05-12T12:55:51.981431+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590551981_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32912233,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33111703,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3879654,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3899601,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.44680852,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4488032,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5056516,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.50764626,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.56449467,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56648934,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.62333775,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6253325,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6821808,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.68417555,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26680
|
1106
|
0
|
2026-05-12T12:56:22.039518+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590582039_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.49027777,"top":0.033333335,"width":0.01875,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26681
|
1107
|
1
|
2026-05-12T12:56:22.104993+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590582104_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32912233,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33111703,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3879654,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3899601,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.44680852,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4488032,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5056516,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.50764626,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.56449467,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56648934,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.62333775,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6253325,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6821808,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.68417555,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26679
|
NULL
|
NULL
|
NULL
|
|
26682
|
1106
|
1
|
2026-05-12T12:56:52.133165+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590612133_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.49027777,"top":0.033333335,"width":0.01875,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26680
|
NULL
|
NULL
|
NULL
|
|
26683
|
1107
|
2
|
2026-05-12T12:56:52.240319+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590612240_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32912233,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33111703,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3879654,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3899601,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.44680852,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4488032,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5056516,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.50764626,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.56449467,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56648934,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.62333775,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6253325,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6821808,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.68417555,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26679
|
NULL
|
NULL
|
NULL
|
|
26684
|
1106
|
2
|
2026-05-12T12:57:22.247154+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590642247_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.49027777,"top":0.033333335,"width":0.01875,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26680
|
NULL
|
NULL
|
NULL
|
|
26685
|
1107
|
3
|
2026-05-12T12:57:22.349554+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590642349_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32912233,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33111703,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3879654,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3899601,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.44680852,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4488032,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5056516,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.50764626,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.56449467,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56648934,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.62333775,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6253325,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6821808,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.68417555,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26679
|
NULL
|
NULL
|
NULL
|
|
26686
|
1106
|
3
|
2026-05-12T12:57:52.330013+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590672330_m1.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.49027777,"top":0.033333335,"width":0.01875,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26680
|
NULL
|
NULL
|
NULL
|
|
26687
|
1107
|
4
|
2026-05-12T12:57:52.484956+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778590672484_m2.jpg...
|
iTerm2
|
ssh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","depth":4,"on_screen":true,"value":"-rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4\n-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4\n-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4\n-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4\n-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4\n-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4\n-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4\n-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4\n-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4\n-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4\n-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4\n-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4\n-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4\n-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4\n-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4\n-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4\n-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4\n-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4\n-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4\n-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4\n-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4\n-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4\n-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4\n-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4\n-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4\n-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4\n-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4\n-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4\n-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4\n-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4\n-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4\n-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4\n-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4\n-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4\n-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4\n-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4\n-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4\n-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4\n-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4\n-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4\n-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4\n-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4\n-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4\n-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-57-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:58 System Audio (output)_2026-05-11_11-58-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 14:59 System Audio (output)_2026-05-11_11-58-41.mp4\n-rw-r--r-- 1 lukas staff 21050 11 May 14:59 System Audio (output)_2026-05-11_11-59-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 14:59 System Audio (output)_2026-05-11_11-59-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_11-59-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:00 System Audio (output)_2026-05-11_12-00-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:00 System Audio (output)_2026-05-11_12-00-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-00-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:01 System Audio (output)_2026-05-11_12-01-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-01-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:02 System Audio (output)_2026-05-11_12-02-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-02-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:03 System Audio (output)_2026-05-11_12-03-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:03 System Audio (output)_2026-05-11_12-03-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:04 System Audio (output)_2026-05-11_12-03-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:04 System Audio (output)_2026-05-11_12-04-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-04-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:05 System Audio (output)_2026-05-11_12-05-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-05-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:06 System Audio (output)_2026-05-11_12-06-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:07 System Audio (output)_2026-05-11_12-06-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:07 System Audio (output)_2026-05-11_12-07-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-07-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:08 System Audio (output)_2026-05-11_12-08-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:08 System Audio (output)_2026-05-11_12-08-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-08-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:09 System Audio (output)_2026-05-11_12-09-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:09 System Audio (output)_2026-05-11_12-09-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:10 System Audio (output)_2026-05-11_12-09-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:10 System Audio (output)_2026-05-11_12-10-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-10-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:11 System Audio (output)_2026-05-11_12-11-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:11 System Audio (output)_2026-05-11_12-11-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:12 System Audio (output)_2026-05-11_12-11-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:12 System Audio (output)_2026-05-11_12-12-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-12-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:13 System Audio (output)_2026-05-11_12-13-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-13-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:14 System Audio (output)_2026-05-11_12-14-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:14 System Audio (output)_2026-05-11_12-14-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-14-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:15 System Audio (output)_2026-05-11_12-15-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:15 System Audio (output)_2026-05-11_12-15-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-15-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:16 System Audio (output)_2026-05-11_12-16-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:17 System Audio (output)_2026-05-11_12-16-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:17 System Audio (output)_2026-05-11_12-17-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-17-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:18 System Audio (output)_2026-05-11_12-18-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:19 System Audio (output)_2026-05-11_12-18-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:19 System Audio (output)_2026-05-11_12-19-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-19-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:20 System Audio (output)_2026-05-11_12-20-28.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-20-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:21 System Audio (output)_2026-05-11_12-21-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:21 System Audio (output)_2026-05-11_12-21-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-21-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:22 System Audio (output)_2026-05-11_12-22-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-22-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:23 System Audio (output)_2026-05-11_12-23-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-23-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:24 System Audio (output)_2026-05-11_12-24-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:24 System Audio (output)_2026-05-11_12-24-35.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-24-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:25 System Audio (output)_2026-05-11_12-25-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-25-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:26 System Audio (output)_2026-05-11_12-26-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:26 System Audio (output)_2026-05-11_12-26-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-26-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:27 System Audio (output)_2026-05-11_12-27-12.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:27 System Audio (output)_2026-05-11_12-27-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:28 System Audio (output)_2026-05-11_12-27-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:28 System Audio (output)_2026-05-11_12-28-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-28-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:29 System Audio (output)_2026-05-11_12-29-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:30 System Audio (output)_2026-05-11_12-29-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:30 System Audio (output)_2026-05-11_12-30-33.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:31 System Audio (output)_2026-05-11_12-30-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:31 System Audio (output)_2026-05-11_12-31-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:32 System Audio (output)_2026-05-11_12-31-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:32 System Audio (output)_2026-05-11_12-32-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:33 System Audio (output)_2026-05-11_12-32-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:33 System Audio (output)_2026-05-11_12-33-11.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-33-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:34 System Audio (output)_2026-05-11_12-33-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:34 System Audio (output)_2026-05-11_12-34-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-34-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:35 System Audio (output)_2026-05-11_12-35-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:35 System Audio (output)_2026-05-11_12-35-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-35-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:36 System Audio (output)_2026-05-11_12-36-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:37 System Audio (output)_2026-05-11_12-36-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:37 System Audio (output)_2026-05-11_12-37-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-37-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:38 System Audio (output)_2026-05-11_12-38-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:39 System Audio (output)_2026-05-11_12-39-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:39 System Audio (output)_2026-05-11_12-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-39-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:40 System Audio (output)_2026-05-11_12-40-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:41 System Audio (output)_2026-05-11_12-41-06.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:41 System Audio (output)_2026-05-11_12-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:42 System Audio (output)_2026-05-11_12-42-13.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:42 System Audio (output)_2026-05-11_12-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:43 System Audio (output)_2026-05-11_12-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:44 System Audio (output)_2026-05-11_12-44-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:44 System Audio (output)_2026-05-11_12-44-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-44-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:45 System Audio (output)_2026-05-11_12-45-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:45 System Audio (output)_2026-05-11_12-45-36.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:46 System Audio (output)_2026-05-11_12-45-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:46 System Audio (output)_2026-05-11_12-46-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:47 System Audio (output)_2026-05-11_12-46-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:47 System Audio (output)_2026-05-11_12-47-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-47-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:48 System Audio (output)_2026-05-11_12-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:48 System Audio (output)_2026-05-11_12-48-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-48-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:49 System Audio (output)_2026-05-11_12-49-19.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:50 System Audio (output)_2026-05-11_12-49-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:50 System Audio (output)_2026-05-11_12-50-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:51 System Audio (output)_2026-05-11_12-50-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:51 System Audio (output)_2026-05-11_12-51-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:52 System Audio (output)_2026-05-11_12-51-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:52 System Audio (output)_2026-05-11_12-52-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-52-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:53 System Audio (output)_2026-05-11_12-53-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-53-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:54 System Audio (output)_2026-05-11_12-54-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 15:55 System Audio (output)_2026-05-11_12-54-56.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:55 System Audio (output)_2026-05-11_12-55-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-55-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:56 System Audio (output)_2026-05-11_12-56-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-56-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:57 System Audio (output)_2026-05-11_12-57-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-57-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:58 System Audio (output)_2026-05-11_12-58-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-58-39.mp4\n-rw-r--r-- 1 lukas staff 21450 11 May 15:59 System Audio (output)_2026-05-11_12-59-02.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 15:59 System Audio (output)_2026-05-11_12-59-24.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_12-59-46.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:00 System Audio (output)_2026-05-11_13-00-31.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:01 System Audio (output)_2026-05-11_13-00-53.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:01 System Audio (output)_2026-05-11_13-01-15.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-01-38.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:02 System Audio (output)_2026-05-11_13-02-00.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:02 System Audio (output)_2026-05-11_13-02-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-02-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-07.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:03 System Audio (output)_2026-05-11_13-03-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-03-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:04 System Audio (output)_2026-05-11_13-04-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-04-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:05 System Audio (output)_2026-05-11_13-05-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-05-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:06 System Audio (output)_2026-05-11_13-06-27.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-06-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:07 System Audio (output)_2026-05-11_13-07-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:07 System Audio (output)_2026-05-11_13-07-34.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:08 System Audio (output)_2026-05-11_13-07-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:08 System Audio (output)_2026-05-11_13-08-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-08-41.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:09 System Audio (output)_2026-05-11_13-09-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:09 System Audio (output)_2026-05-11_13-09-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-09-48.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:10 System Audio (output)_2026-05-11_13-10-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:10 System Audio (output)_2026-05-11_13-10-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:11 System Audio (output)_2026-05-11_13-10-54.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:11 System Audio (output)_2026-05-11_13-11-17.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-11-39.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-01.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:12 System Audio (output)_2026-05-11_13-12-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-12-45.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:13 System Audio (output)_2026-05-11_13-13-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-13-52.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:14 System Audio (output)_2026-05-11_13-14-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-14-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:15 System Audio (output)_2026-05-11_13-15-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-15-44.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:16 System Audio (output)_2026-05-11_13-16-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:16 System Audio (output)_2026-05-11_13-16-29.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-16-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:17 System Audio (output)_2026-05-11_13-17-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:17 System Audio (output)_2026-05-11_13-17-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:18 System Audio (output)_2026-05-11_13-17-58.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:18 System Audio (output)_2026-05-11_13-18-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-18-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:19 System Audio (output)_2026-05-11_13-19-05.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:19 System Audio (output)_2026-05-11_13-19-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-19-50.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:20 System Audio (output)_2026-05-11_13-20-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:20 System Audio (output)_2026-05-11_13-20-35.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:21 System Audio (output)_2026-05-11_13-20-57.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:21 System Audio (output)_2026-05-11_13-21-20.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-21-42.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:22 System Audio (output)_2026-05-11_13-22-04.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:22 System Audio (output)_2026-05-11_13-22-26.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-22-49.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-11.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:23 System Audio (output)_2026-05-11_13-23-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:24 System Audio (output)_2026-05-11_13-23-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:24 System Audio (output)_2026-05-11_13-24-18.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-24-40.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:25 System Audio (output)_2026-05-11_13-25-03.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:25 System Audio (output)_2026-05-11_13-25-25.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:26 System Audio (output)_2026-05-11_13-25-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:26 System Audio (output)_2026-05-11_13-26-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-26-55.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:27 System Audio (output)_2026-05-11_13-27-17.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-27-40.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:28 System Audio (output)_2026-05-11_13-28-02.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:28 System Audio (output)_2026-05-11_13-28-25.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-28-47.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-09.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:29 System Audio (output)_2026-05-11_13-29-32.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-29-54.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:30 System Audio (output)_2026-05-11_13-30-16.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:31 System Audio (output)_2026-05-11_13-30-38.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-01.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:31 System Audio (output)_2026-05-11_13-31-23.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-31-45.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:32 System Audio (output)_2026-05-11_13-32-08.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:32 System Audio (output)_2026-05-11_13-32-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:33 System Audio (output)_2026-05-11_13-32-52.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:33 System Audio (output)_2026-05-11_13-33-37.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-33-59.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:34 System Audio (output)_2026-05-11_13-34-21.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:35 System Audio (output)_2026-05-11_13-34-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:35 System Audio (output)_2026-05-11_13-35-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-35-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:36 System Audio (output)_2026-05-11_13-36-37.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-36-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:37 System Audio (output)_2026-05-11_13-37-22.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-37-44.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:38 System Audio (output)_2026-05-11_13-38-29.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-38-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:39 System Audio (output)_2026-05-11_13-39-14.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:39 System Audio (output)_2026-05-11_13-39-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-39-59.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:40 System Audio (output)_2026-05-11_13-40-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-40-43.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-06.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:41 System Audio (output)_2026-05-11_13-41-28.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-41-51.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:42 System Audio (output)_2026-05-11_13-42-13.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-36.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-42-58.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:43 System Audio (output)_2026-05-11_13-43-21.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-43-43.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:44 System Audio (output)_2026-05-11_13-44-05.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:44 System Audio (output)_2026-05-11_13-44-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-44-50.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:45 System Audio (output)_2026-05-11_13-45-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:46 System Audio (output)_2026-05-11_13-45-57.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:46 System Audio (output)_2026-05-11_13-46-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-46-42.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:47 System Audio (output)_2026-05-11_13-47-04.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:47 System Audio (output)_2026-05-11_13-47-27.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-47-49.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:48 System Audio (output)_2026-05-11_13-48-12.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:48 System Audio (output)_2026-05-11_13-48-34.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:49 System Audio (output)_2026-05-11_13-48-56.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:49 System Audio (output)_2026-05-11_13-49-19.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-49-41.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:50 System Audio (output)_2026-05-11_13-50-03.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:50 System Audio (output)_2026-05-11_13-50-26.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 16:51 System Audio (output)_2026-05-11_13-50-48.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-10.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:51 System Audio (output)_2026-05-11_13-51-33.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 16:52 System Audio (output)_2026-05-11_13-51-55.mp4\ndrwxr-xr-x 9 lukas staff 288 11 May 07:54 data\ndrwxr-xr-x 2 lukas staff 64 11 May 15:48 pending-transcriptions\n-rw-r--r-- 1 lukas staff 29419 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n-rw-r--r-- 1 lukas staff 56479 10 May 14:11 soundcore AeroClip (input)_2026-05-10_11-11-05.mp4\n-rw-r--r--@ 1 lukas staff 181831 10 May 14:12 soundcore AeroClip (input)_2026-05-10_11-11-35.mp4\n-rw-r--r-- 1 lukas staff 149782 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-42-53.mp4\n-rw-r--r-- 1 lukas staff 91059 10 May 14:43 soundcore AeroClip (input)_2026-05-10_11-43-25.mp4\n-rw-r--r-- 1 lukas staff 30604 10 May 14:44 soundcore AeroClip (input)_2026-05-10_11-44-25.mp4\n-rw-r--r-- 1 lukas staff 93813 10 May 14:45 soundcore AeroClip (input)_2026-05-10_11-44-55.mp4\n-rw-r--r-- 1 lukas staff 40444 10 May 21:11 soundcore AeroClip (input)_2026-05-10_18-11-18.mp4\n-rw-r--r-- 1 lukas staff 193020 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-11-48.mp4\n-rw-r--r-- 1 lukas staff 218460 10 May 21:12 soundcore AeroClip (input)_2026-05-10_18-12-18.mp4\n-rw-r--r-- 1 lukas staff 168343 10 May 21:13 soundcore AeroClip (input)_2026-05-10_18-12-48.mp4\n-rw-r--r-- 1 lukas staff 108457 10 May 21:16 soundcore AeroClip (input)_2026-05-10_18-16-18.mp4\n-rw-r--r-- 1 lukas staff 206580 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-16-48.mp4\n-rw-r--r-- 1 lukas staff 173748 10 May 21:17 soundcore AeroClip (input)_2026-05-10_18-17-18.mp4\n-rw-r--r-- 1 lukas staff 121991 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-18-48.mp4\n-rw-r--r-- 1 lukas staff 62738 10 May 21:19 soundcore AeroClip (input)_2026-05-10_18-19-18.mp4\n-rw-r--r-- 1 lukas staff 76474 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-19-48.mp4\n-rw-r--r-- 1 lukas staff 34366 10 May 21:20 soundcore AeroClip (input)_2026-05-10_18-20-18.mp4\n-rw-r--r-- 1 lukas staff 31972 10 May 21:21 soundcore AeroClip (input)_2026-05-10_18-21-18.mp4\n-rw-r--r-- 1 lukas staff 85887 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-21-48.mp4\n-rw-r--r-- 1 lukas staff 204874 10 May 21:22 soundcore AeroClip (input)_2026-05-10_18-22-18.mp4\n-rw-r--r-- 1 lukas staff 212074 10 May 21:23 soundcore AeroClip (input)_2026-05-10_18-22-48.mp4\n-rw-r--r-- 1 lukas staff 66483 10 May 21:24 soundcore AeroClip (input)_2026-05-10_18-24-18.mp4\n-rw-r--r-- 1 lukas staff 36049 10 May 21:29 soundcore AeroClip (input)_2026-05-10_18-29-08.mp4\n-rw-r--r-- 1 lukas staff 54646 10 May 21:30 soundcore AeroClip (input)_2026-05-10_18-30-08.mp4\n-rw-r--r-- 1 lukas staff 69996 10 May 21:31 soundcore AeroClip (input)_2026-05-10_18-30-38.mp4\n-rw-r--r-- 1 lukas staff 90765 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-31-38.mp4\n-rw-r--r-- 1 lukas staff 145150 10 May 21:32 soundcore AeroClip (input)_2026-05-10_18-32-08.mp4\n-rw-r--r-- 1 lukas staff 76582 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-32-38.mp4\n-rw-r--r-- 1 lukas staff 91200 10 May 21:33 soundcore AeroClip (input)_2026-05-10_18-33-08.mp4\n-rw-r--r-- 1 lukas staff 173940 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-33-38.mp4\n-rw-r--r-- 1 lukas staff 113036 10 May 21:34 soundcore AeroClip (input)_2026-05-10_18-34-08.mp4\n-rw-r--r-- 1 lukas staff 128287 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-34-38.mp4\n-rw-r--r-- 1 lukas staff 68218 10 May 21:35 soundcore AeroClip (input)_2026-05-10_18-35-08.mp4\n-rw-r--r-- 1 lukas staff 135683 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-35-38.mp4\n-rw-r--r-- 1 lukas staff 99704 10 May 21:36 soundcore AeroClip (input)_2026-05-10_18-36-08.mp4\n-rw-r--r-- 1 lukas staff 142027 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-36-38.mp4\n-rw-r--r-- 1 lukas staff 106127 10 May 21:37 soundcore AeroClip (input)_2026-05-10_18-37-08.mp4\n-rw-r--r-- 1 lukas staff 118972 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-37-38.mp4\n-rw-r--r-- 1 lukas staff 110153 10 May 21:38 soundcore AeroClip (input)_2026-05-10_18-38-08.mp4\n-rw-r--r-- 1 lukas staff 124144 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-38-38.mp4\n-rw-r--r-- 1 lukas staff 145103 10 May 21:39 soundcore AeroClip (input)_2026-05-10_18-39-08.mp4\n-rw-r--r-- 1 lukas staff 128066 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-39-38.mp4\n-rw-r--r-- 1 lukas staff 115915 10 May 21:40 soundcore AeroClip (input)_2026-05-10_18-40-08.mp4\n-rw-r--r-- 1 lukas staff 151423 10 May 21:41 soundcore AeroClip (input)_2026-05-10_18-40-38.mp4\n-rw-r--r-- 1 lukas staff 153224 10 May 21:50 soundcore AeroClip (input)_2026-05-10_18-49-39.mp4\n-rw-r--r-- 1 lukas staff 27509 11 May 07:55 soundcore AeroClip (input)_2026-05-11_04-54-38.mp4\n-rw-r--r-- 1 lukas staff 29576 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-06-49.mp4\n-rw-r--r-- 1 lukas staff 100760 11 May 09:07 soundcore AeroClip (input)_2026-05-11_06-07-21.mp4\n-rw-r--r-- 1 lukas staff 36750 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-07-51.mp4\n-rw-r--r-- 1 lukas staff 79544 11 May 09:08 soundcore AeroClip (input)_2026-05-11_06-08-21.mp4\n-rw-r--r-- 1 lukas staff 78649 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-08-51.mp4\n-rw-r--r-- 1 lukas staff 70160 11 May 09:09 soundcore AeroClip (input)_2026-05-11_06-09-21.mp4\n-rw-r--r-- 1 lukas staff 30879 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-09-51.mp4\n-rw-r--r-- 1 lukas staff 68016 11 May 09:10 soundcore AeroClip (input)_2026-05-11_06-10-21.mp4\n-rw-r--r-- 1 lukas staff 32996 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-10-51.mp4\n-rw-r--r-- 1 lukas staff 17101 11 May 09:11 soundcore AeroClip (input)_2026-05-11_06-11-21.mp4\n-rw-r--r-- 1 lukas staff 6005 11 May 09:12 soundcore AeroClip (input)_2026-05-11_06-12-14.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-12-49.mp4\n-rw-r--r-- 1 lukas staff 5613 11 May 09:13 soundcore AeroClip (input)_2026-05-11_06-13-21.mp4\n-rw-r--r-- 1 lukas staff 7607 11 May 09:14 soundcore AeroClip (input)_2026-05-11_06-13-58.mp4\n-rw-r--r-- 1 lukas staff 10476 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-14-30.mp4\n-rw-r--r-- 1 lukas staff 8378 11 May 09:15 soundcore AeroClip (input)_2026-05-11_06-15-00.mp4\n-rw-r--r-- 1 lukas staff 23989 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-15-30.mp4\n-rw-r--r-- 1 lukas staff 20245 11 May 09:16 soundcore AeroClip (input)_2026-05-11_06-16-00.mp4\n-rw-r--r-- 1 lukas staff 55920 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-16-30.mp4\n-rw-r--r-- 1 lukas staff 106555 11 May 09:17 soundcore AeroClip (input)_2026-05-11_06-17-00.mp4\n-rw-r--r-- 1 lukas staff 128293 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-17-30.mp4\n-rw-r--r-- 1 lukas staff 131841 11 May 09:18 soundcore AeroClip (input)_2026-05-11_06-18-00.mp4\n-rw-r--r-- 1 lukas staff 102940 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-18-30.mp4\n-rw-r--r-- 1 lukas staff 32693 11 May 09:19 soundcore AeroClip (input)_2026-05-11_06-19-00.mp4\n-rw-r--r-- 1 lukas staff 73250 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-19-30.mp4\n-rw-r--r-- 1 lukas staff 55261 11 May 09:20 soundcore AeroClip (input)_2026-05-11_06-20-00.mp4\n-rw-r--r-- 1 lukas staff 44782 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-20-30.mp4\n-rw-r--r-- 1 lukas staff 53024 11 May 09:21 soundcore AeroClip (input)_2026-05-11_06-21-00.mp4\n-rw-r--r-- 1 lukas staff 20139 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-21-30.mp4\n-rw-r--r-- 1 lukas staff 12416 11 May 09:22 soundcore AeroClip (input)_2026-05-11_06-22-00.mp4\n-rw-r--r-- 1 lukas staff 9670 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-22-30.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:23 soundcore AeroClip (input)_2026-05-11_06-23-19.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-23-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:24 soundcore AeroClip (input)_2026-05-11_06-24-21.mp4\n-rw-r--r-- 1 lukas staff 5636 11 May 09:25 soundcore AeroClip (input)_2026-05-11_06-24-51.mp4\n-rw-r--r-- 1 lukas staff 4628 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-25-43.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:26 soundcore AeroClip (input)_2026-05-11_06-26-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-26-45.mp4\n-rw-r--r-- 1 lukas staff 4612 11 May 09:27 soundcore AeroClip (input)_2026-05-11_06-27-15.mp4\n-rw-r--r-- 1 lukas staff 5559 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-27-45.mp4\n-rw-r--r-- 1 lukas staff 5626 11 May 09:28 soundcore AeroClip (input)_2026-05-11_06-28-15.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-28-50.mp4\n-rw-r--r-- 1 lukas staff 8817 11 May 09:29 soundcore AeroClip (input)_2026-05-11_06-29-22.mp4\n-rw-r--r-- 1 lukas staff 5812 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-29-52.mp4\n-rw-r--r-- 1 lukas staff 5671 11 May 09:30 soundcore AeroClip (input)_2026-05-11_06-30-22.mp4\n-rw-r--r-- 1 lukas staff 7963 11 May 09:31 soundcore AeroClip (input)_2026-05-11_06-31-11.mp4\n-rw-r--r-- 1 lukas staff 6614 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-31-43.mp4\n-rw-r--r-- 1 lukas staff 5606 11 May 09:32 soundcore AeroClip (input)_2026-05-11_06-32-20.mp4\n-rw-r--r-- 1 lukas staff 6390 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-32-52.mp4\n-rw-r--r-- 1 lukas staff 60313 11 May 09:33 soundcore AeroClip (input)_2026-05-11_06-33-22.mp4\n-rw-r--r-- 1 lukas staff 88433 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-33-52.mp4\n-rw-r--r-- 1 lukas staff 125249 11 May 09:34 soundcore AeroClip (input)_2026-05-11_06-34-22.mp4\n-rw-r--r-- 1 lukas staff 102975 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-34-52.mp4\n-rw-r--r-- 1 lukas staff 21399 11 May 09:35 soundcore AeroClip (input)_2026-05-11_06-35-22.mp4\n-rw-r--r-- 1 lukas staff 39379 11 May 09:36 soundcore AeroClip (input)_2026-05-11_06-35-52.mp4\n-rw-r--r-- 1 lukas staff 9957 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-36-46.mp4\n-rw-r--r-- 1 lukas staff 88148 11 May 09:37 soundcore AeroClip (input)_2026-05-11_06-37-18.mp4\n-rw-r--r-- 1 lukas staff 135840 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-37-48.mp4\n-rw-r--r-- 1 lukas staff 34770 11 May 09:38 soundcore AeroClip (input)_2026-05-11_06-38-18.mp4\n-rw-r--r-- 1 lukas staff 52737 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-38-48.mp4\n-rw-r--r-- 1 lukas staff 70070 11 May 09:39 soundcore AeroClip (input)_2026-05-11_06-39-18.mp4\n-rw-r--r-- 1 lukas staff 50628 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-39-48.mp4\n-rw-r--r-- 1 lukas staff 76838 11 May 09:40 soundcore AeroClip (input)_2026-05-11_06-40-18.mp4\n-rw-r--r-- 1 lukas staff 66733 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-40-48.mp4\n-rw-r--r-- 1 lukas staff 77887 11 May 09:41 soundcore AeroClip (input)_2026-05-11_06-41-18.mp4\n-rw-r--r-- 1 lukas staff 63922 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-41-48.mp4\n-rw-r--r-- 1 lukas staff 18884 11 May 09:42 soundcore AeroClip (input)_2026-05-11_06-42-18.mp4\n-rw-r--r-- 1 lukas staff 13942 11 May 09:43 soundcore AeroClip (input)_2026-05-11_06-42-56.mp4\n-rw-r--r-- 1 lukas staff 5650 11 May 09:44 soundcore AeroClip (input)_2026-05-11_06-43-53.mp4\n-rw-r--r-- 1 lukas staff 4620 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-44-38.mp4\n-rw-r--r-- 1 lukas staff 6851 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-10.mp4\n-rw-r--r-- 1 lukas staff 1107 11 May 09:45 soundcore AeroClip (input)_2026-05-11_06-45-22.mp4\n-rw-r--r-- 1 lukas staff 17800 11 May 19:18 soundcore AeroClip (input)_2026-05-11_16-18-23.mp4\n-rw-r--r-- 1 lukas staff 12732 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-18-54.mp4\n-rw-r--r-- 1 lukas staff 7361 11 May 19:19 soundcore AeroClip (input)_2026-05-11_16-19-24.mp4\n-rw-r--r-- 1 lukas staff 16622 11 May 19:20 soundcore AeroClip (input)_2026-05-11_16-19-54.mp4\n-rw-r--r-- 1 lukas staff 150936 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-20-29.mp4\n-rw-r--r-- 1 lukas staff 134732 11 May 19:21 soundcore AeroClip (input)_2026-05-11_16-21-01.mp4\n-rw-r--r-- 1 lukas staff 23690 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-21-31.mp4\n-rw-r--r-- 1 lukas staff 16651 11 May 19:22 soundcore AeroClip (input)_2026-05-11_16-22-01.mp4\n-rw-r--r-- 1 lukas staff 6922 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-22-31.mp4\n-rw-r--r-- 1 lukas staff 5603 11 May 19:23 soundcore AeroClip (input)_2026-05-11_16-23-01.mp4\n-rw-r--r-- 1 lukas staff 49509 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-23-31.mp4\n-rw-r--r-- 1 lukas staff 34462 11 May 19:24 soundcore AeroClip (input)_2026-05-11_16-24-01.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd .. \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume1/screenpipe/\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ll\ntotal 26G\ndrwxrwxrwx+ 1 root root 410 May 12 15:15 .\ndrwxr-xr-x 1 root root 450 Apr 25 19:39 ..\ndrwxrwxrwx+ 1 Adm1n admin 202 Apr 26 20:10 app\ndrwxrwxrwx+ 1 Adm1n admin 298 May 10 13:46 data\ndrwxrwxrwx+ 1 Adm1n admin 144 May 9 09:41 .git\ndrwxrwxrwx+ 1 Adm1n admin 70 May 10 13:47 logs\ndrwxrwxrwx+ 1 Adm1n admin 164 Apr 11 16:51 pipes\ndrwxrwxrwx+ 1 root root 5.1K May 11 20:55 '#recycle'\n-rwxrwxrwx+ 1 root root 31 Apr 18 17:42 app_settings.json\n-rwxrwxrwx+ 1 Adm1n admin 13G May 11 20:55 archive.db\n-rwxrwxrwx+ 1 Adm1n admin 11G May 10 12:31 archive.db-bak\n-rwxrwxrwx+ 1 Adm1n admin 3.5G May 11 20:15 db.sqlite\n-rwxrwxrwx+ 1 Adm1n admin 32K May 12 05:48 db.sqlite-shm\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 26 17:17 db.sqlite-wal\n-rwxrwxrwx+ 1 Adm1n admin 11K May 12 09:09 .DS_Store\n-rwxrwxrwx+ 1 Adm1n admin 219 Apr 24 19:33 .gitignore\n-rwxrwxrwx+ 1 Adm1n admin 0 Apr 13 17:21 screenpipe.db\n-rwxrwxrwx+ 1 Adm1n admin 8.4K May 12 15:15 screenpipe_fts_migrate.sh\n-rwxrwxrwx+ 1 Adm1n admin 32K May 11 20:48 screenpipe_sync.sh\n-rwxrwxrwx+ 1 Adm1n admin 20K May 10 13:06 screenpipe_sync_updated.sh\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ cp archive.db archive.db.bak-pre-installid\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ ./screenpipe_fts_migrate.sh archive.db\n================================================\nScreenpipe FTS migration\nDB: archive.db\nSize: 13G\n================================================\n\n▶ Creating install registry\n _installs table ✓ 0m01s\n\n▶ Adding install_id to base tables\n video_chunks already present\nError: stepping, UNIQUE constraint failed: video_chunks.install_id, video_chunks.id (19)\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT * FROM _installs;\"\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$ sqlite3 archive.db \"SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\"\nError: in prepare, no such column: install_id\n SELECT install_id, COUNT(*) FROM frames GROUP BY install_id;\n ^--- error here\nAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe$","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32912233,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33111703,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.3879654,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3899601,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-129-190:~ (-zsh)","depth":2,"bounds":{"left":0.44680852,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4488032,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5056516,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.50764626,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.56449467,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56648934,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.62333775,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6253325,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6821808,"top":1.0,"width":0.058843084,"height":-0.042298436},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.68417555,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ssh","depth":1,"bounds":{"left":0.5049867,"top":1.0,"width":0.008976064,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-4838407079862213198
|
-5807833556681052111
|
idle
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 4620 11 May 11:46 -rw-r--r-- 1 lukas staff 4620 11 May 11:46 System Audio (output)_2026-05-11_08-46-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:46 System Audio (output)_2026-05-11_08-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:47 System Audio (output)_2026-05-11_08-47-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:48 System Audio (output)_2026-05-11_08-47-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:48 System Audio (output)_2026-05-11_08-48-28.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:49 System Audio (output)_2026-05-11_08-49-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:49 System Audio (output)_2026-05-11_08-49-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-49-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:50 System Audio (output)_2026-05-11_08-50-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-50-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:51 System Audio (output)_2026-05-11_08-51-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-51-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:52 System Audio (output)_2026-05-11_08-52-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:52 System Audio (output)_2026-05-11_08-52-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:53 System Audio (output)_2026-05-11_08-52-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:53 System Audio (output)_2026-05-11_08-53-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-53-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:54 System Audio (output)_2026-05-11_08-54-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:54 System Audio (output)_2026-05-11_08-54-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-54-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:55 System Audio (output)_2026-05-11_08-55-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-55-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 11:56 System Audio (output)_2026-05-11_08-56-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:56 System Audio (output)_2026-05-11_08-56-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-56-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:57 System Audio (output)_2026-05-11_08-57-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-57-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:58 System Audio (output)_2026-05-11_08-58-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-58-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 11:59 System Audio (output)_2026-05-11_08-59-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_08-59-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:00 System Audio (output)_2026-05-11_09-00-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-00-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:01 System Audio (output)_2026-05-11_09-01-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:01 System Audio (output)_2026-05-11_09-01-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-01-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:02 System Audio (output)_2026-05-11_09-02-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:02 System Audio (output)_2026-05-11_09-02-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-02-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:03 System Audio (output)_2026-05-11_09-03-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:03 System Audio (output)_2026-05-11_09-03-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-03-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:04 System Audio (output)_2026-05-11_09-04-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-04-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:05 System Audio (output)_2026-05-11_09-05-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:05 System Audio (output)_2026-05-11_09-05-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-05-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:06 System Audio (output)_2026-05-11_09-06-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:07 System Audio (output)_2026-05-11_09-06-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:07 System Audio (output)_2026-05-11_09-07-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-07-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:08 System Audio (output)_2026-05-11_09-08-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:08 System Audio (output)_2026-05-11_09-08-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-08-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:09 System Audio (output)_2026-05-11_09-09-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:09 System Audio (output)_2026-05-11_09-09-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-09-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:10 System Audio (output)_2026-05-11_09-10-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-10-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:11 System Audio (output)_2026-05-11_09-11-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:11 System Audio (output)_2026-05-11_09-11-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-11-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:12 System Audio (output)_2026-05-11_09-12-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:12 System Audio (output)_2026-05-11_09-12-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-12-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:13 System Audio (output)_2026-05-11_09-13-35.mp4
-rw-r--r-- 1 lukas staff 148642 11 May 12:14 System Audio (output)_2026-05-11_09-13-57.mp4
-rw-r--r-- 1 lukas staff 254941 11 May 12:14 System Audio (output)_2026-05-11_09-14-20.mp4
-rw-r--r-- 1 lukas staff 264310 11 May 12:15 System Audio (output)_2026-05-11_09-14-43.mp4
-rw-r--r-- 1 lukas staff 272393 11 May 12:15 System Audio (output)_2026-05-11_09-15-05.mp4
-rw-r--r-- 1 lukas staff 248013 11 May 12:15 System Audio (output)_2026-05-11_09-15-28.mp4
-rw-r--r-- 1 lukas staff 263009 11 May 12:16 System Audio (output)_2026-05-11_09-15-50.mp4
-rw-r--r-- 1 lukas staff 253208 11 May 12:16 System Audio (output)_2026-05-11_09-16-12.mp4
-rw-r--r-- 1 lukas staff 242122 11 May 12:16 System Audio (output)_2026-05-11_09-16-34.mp4
-rw-r--r-- 1 lukas staff 257156 11 May 12:17 System Audio (output)_2026-05-11_09-16-57.mp4
-rw-r--r-- 1 lukas staff 239210 11 May 12:17 System Audio (output)_2026-05-11_09-17-19.mp4
-rw-r--r-- 1 lukas staff 237653 11 May 12:18 System Audio (output)_2026-05-11_09-17-41.mp4
-rw-r--r-- 1 lukas staff 245101 11 May 12:18 System Audio (output)_2026-05-11_09-18-04.mp4
-rw-r--r-- 1 lukas staff 235393 11 May 12:18 System Audio (output)_2026-05-11_09-18-26.mp4
-rw-r--r-- 1 lukas staff 249343 11 May 12:19 System Audio (output)_2026-05-11_09-18-49.mp4
-rw-r--r-- 1 lukas staff 244654 11 May 12:19 System Audio (output)_2026-05-11_09-19-11.mp4
-rw-r--r-- 1 lukas staff 259224 11 May 12:19 System Audio (output)_2026-05-11_09-19-33.mp4
-rw-r--r-- 1 lukas staff 218222 11 May 12:20 System Audio (output)_2026-05-11_09-19-56.mp4
-rw-r--r-- 1 lukas staff 262035 11 May 12:20 System Audio (output)_2026-05-11_09-20-19.mp4
-rw-r--r-- 1 lukas staff 243667 11 May 12:21 System Audio (output)_2026-05-11_09-20-41.mp4
-rw-r--r-- 1 lukas staff 225529 11 May 12:21 System Audio (output)_2026-05-11_09-21-03.mp4
-rw-r--r-- 1 lukas staff 243406 11 May 12:21 System Audio (output)_2026-05-11_09-21-26.mp4
-rw-r--r-- 1 lukas staff 248837 11 May 12:22 System Audio (output)_2026-05-11_09-21-48.mp4
-rw-r--r-- 1 lukas staff 209642 11 May 12:22 System Audio (output)_2026-05-11_09-22-10.mp4
-rw-r--r-- 1 lukas staff 16741 11 May 12:22 System Audio (output)_2026-05-11_09-22-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:23 System Audio (output)_2026-05-11_09-22-55.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:23 System Audio (output)_2026-05-11_09-23-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:24 System Audio (output)_2026-05-11_09-23-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:24 System Audio (output)_2026-05-11_09-24-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:25 System Audio (output)_2026-05-11_09-24-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:25 System Audio (output)_2026-05-11_09-25-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-25-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:26 System Audio (output)_2026-05-11_09-26-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-26-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:27 System Audio (output)_2026-05-11_09-27-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:28 System Audio (output)_2026-05-11_09-27-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:28 System Audio (output)_2026-05-11_09-28-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:29 System Audio (output)_2026-05-11_09-28-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:29 System Audio (output)_2026-05-11_09-29-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:30 System Audio (output)_2026-05-11_09-29-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:30 System Audio (output)_2026-05-11_09-30-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-30-41.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:31 System Audio (output)_2026-05-11_09-31-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:31 System Audio (output)_2026-05-11_09-31-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-31-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:32 System Audio (output)_2026-05-11_09-32-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-32-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:33 System Audio (output)_2026-05-11_09-33-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:34 System Audio (output)_2026-05-11_09-33-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:34 System Audio (output)_2026-05-11_09-34-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-34-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:35 System Audio (output)_2026-05-11_09-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-35-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:36 System Audio (output)_2026-05-11_09-36-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:36 System Audio (output)_2026-05-11_09-36-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-36-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:37 System Audio (output)_2026-05-11_09-37-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-37-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:38 System Audio (output)_2026-05-11_09-38-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-38-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:39 System Audio (output)_2026-05-11_09-39-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:39 System Audio (output)_2026-05-11_09-39-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:40 System Audio (output)_2026-05-11_09-39-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:40 System Audio (output)_2026-05-11_09-40-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-40-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:41 System Audio (output)_2026-05-11_09-41-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:42 System Audio (output)_2026-05-11_09-41-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:42 System Audio (output)_2026-05-11_09-42-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-42-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:43 System Audio (output)_2026-05-11_09-43-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-43-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:44 System Audio (output)_2026-05-11_09-44-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:44 System Audio (output)_2026-05-11_09-44-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-44-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:45 System Audio (output)_2026-05-11_09-45-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:45 System Audio (output)_2026-05-11_09-45-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-45-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:46 System Audio (output)_2026-05-11_09-46-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-46-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:47 System Audio (output)_2026-05-11_09-47-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:48 System Audio (output)_2026-05-11_09-47-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:48 System Audio (output)_2026-05-11_09-48-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-48-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:49 System Audio (output)_2026-05-11_09-49-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:50 System Audio (output)_2026-05-11_09-49-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:50 System Audio (output)_2026-05-11_09-50-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-50-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:51 System Audio (output)_2026-05-11_09-51-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:51 System Audio (output)_2026-05-11_09-51-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:52 System Audio (output)_2026-05-11_09-51-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:52 System Audio (output)_2026-05-11_09-52-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-52-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:53 System Audio (output)_2026-05-11_09-53-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-53-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:54 System Audio (output)_2026-05-11_09-54-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:54 System Audio (output)_2026-05-11_09-54-24.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-54-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:55 System Audio (output)_2026-05-11_09-55-08.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:55 System Audio (output)_2026-05-11_09-55-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:56 System Audio (output)_2026-05-11_09-55-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:56 System Audio (output)_2026-05-11_09-56-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-56-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:57 System Audio (output)_2026-05-11_09-57-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-57-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:58 System Audio (output)_2026-05-11_09-58-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:58 System Audio (output)_2026-05-11_09-58-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-58-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 12:59 System Audio (output)_2026-05-11_09-59-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 12:59 System Audio (output)_2026-05-11_09-59-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:00 System Audio (output)_2026-05-11_09-59-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:00 System Audio (output)_2026-05-11_10-00-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-00-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:01 System Audio (output)_2026-05-11_10-01-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-01-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:02 System Audio (output)_2026-05-11_10-02-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:03 System Audio (output)_2026-05-11_10-02-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:03 System Audio (output)_2026-05-11_10-03-18.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:04 System Audio (output)_2026-05-11_10-03-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:04 System Audio (output)_2026-05-11_10-04-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:05 System Audio (output)_2026-05-11_10-04-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:05 System Audio (output)_2026-05-11_10-05-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:06 System Audio (output)_2026-05-11_10-05-54.mp4
-rw-r--r-- 1 lukas staff 12287 11 May 13:06 System Audio (output)_2026-05-11_10-06-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:07 System Audio (output)_2026-05-11_10-06-38.mp4
-rw-r--r-- 1 lukas staff 11822 11 May 13:07 System Audio (output)_2026-05-11_10-07-01.mp4
-rw-r--r-- 1 lukas staff 6601 11 May 13:07 System Audio (output)_2026-05-11_10-07-23.mp4
-rw-r--r-- 1 lukas staff 10156 11 May 13:08 System Audio (output)_2026-05-11_10-07-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:08 System Audio (output)_2026-05-11_10-08-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-08-52.mp4
-rw-r--r-- 1 lukas staff 11722 11 May 13:09 System Audio (output)_2026-05-11_10-09-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:09 System Audio (output)_2026-05-11_10-09-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-09-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:10 System Audio (output)_2026-05-11_10-10-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-10-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:11 System Audio (output)_2026-05-11_10-11-06.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:11 System Audio (output)_2026-05-11_10-11-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-11-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:12 System Audio (output)_2026-05-11_10-12-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:12 System Audio (output)_2026-05-11_10-12-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:13 System Audio (output)_2026-05-11_10-12-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:13 System Audio (output)_2026-05-11_10-13-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-13-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:14 System Audio (output)_2026-05-11_10-14-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-14-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:15 System Audio (output)_2026-05-11_10-15-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:15 System Audio (output)_2026-05-11_10-15-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:16 System Audio (output)_2026-05-11_10-15-54.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:16 System Audio (output)_2026-05-11_10-16-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-16-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:17 System Audio (output)_2026-05-11_10-17-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:17 System Audio (output)_2026-05-11_10-17-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-17-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:18 System Audio (output)_2026-05-11_10-18-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-18-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:19 System Audio (output)_2026-05-11_10-19-36.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:20 System Audio (output)_2026-05-11_10-19-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:20 System Audio (output)_2026-05-11_10-20-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:21 System Audio (output)_2026-05-11_10-20-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:21 System Audio (output)_2026-05-11_10-21-05.mp4
-rw-r--r-- 1 lukas staff 11467 11 May 13:21 System Audio (output)_2026-05-11_10-21-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-21-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:22 System Audio (output)_2026-05-11_10-22-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:23 System Audio (output)_2026-05-11_10-22-56.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:23 System Audio (output)_2026-05-11_10-23-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-23-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:24 System Audio (output)_2026-05-11_10-24-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:25 System Audio (output)_2026-05-11_10-24-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:25 System Audio (output)_2026-05-11_10-25-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-25-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:26 System Audio (output)_2026-05-11_10-26-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-26-39.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-01.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:27 System Audio (output)_2026-05-11_10-27-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:28 System Audio (output)_2026-05-11_10-27-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:28 System Audio (output)_2026-05-11_10-28-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-28-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:29 System Audio (output)_2026-05-11_10-29-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:29 System Audio (output)_2026-05-11_10-29-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-29-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:30 System Audio (output)_2026-05-11_10-30-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-30-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:31 System Audio (output)_2026-05-11_10-31-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-31-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:32 System Audio (output)_2026-05-11_10-32-35.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:33 System Audio (output)_2026-05-11_10-32-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:33 System Audio (output)_2026-05-11_10-33-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-33-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:34 System Audio (output)_2026-05-11_10-34-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:34 System Audio (output)_2026-05-11_10-34-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:35 System Audio (output)_2026-05-11_10-34-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:35 System Audio (output)_2026-05-11_10-35-33.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-35-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:36 System Audio (output)_2026-05-11_10-36-17.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-36-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:37 System Audio (output)_2026-05-11_10-37-24.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:38 System Audio (output)_2026-05-11_10-37-46.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:38 System Audio (output)_2026-05-11_10-38-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-38-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:39 System Audio (output)_2026-05-11_10-39-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:39 System Audio (output)_2026-05-11_10-39-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-39-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:40 System Audio (output)_2026-05-11_10-40-21.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-40-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:41 System Audio (output)_2026-05-11_10-41-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-41-50.mp4
-rw-r--r-- 1 lukas staff 11910 11 May 13:42 System Audio (output)_2026-05-11_10-42-13.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:42 System Audio (output)_2026-05-11_10-42-35.mp4
-rw-r--r-- 1 lukas staff 11037 11 May 13:43 System Audio (output)_2026-05-11_10-42-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:43 System Audio (output)_2026-05-11_10-43-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:44 System Audio (output)_2026-05-11_10-44-28.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:45 System Audio (output)_2026-05-11_10-44-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:45 System Audio (output)_2026-05-11_10-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:46 System Audio (output)_2026-05-11_10-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:46 System Audio (output)_2026-05-11_10-46-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:47 System Audio (output)_2026-05-11_10-47-04.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:47 System Audio (output)_2026-05-11_10-47-26.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:48 System Audio (output)_2026-05-11_10-47-48.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:48 System Audio (output)_2026-05-11_10-48-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-48-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:49 System Audio (output)_2026-05-11_10-49-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-49-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:50 System Audio (output)_2026-05-11_10-50-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-50-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:51 System Audio (output)_2026-05-11_10-51-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:51 System Audio (output)_2026-05-11_10-51-32.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:52 System Audio (output)_2026-05-11_10-51-54.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:52 System Audio (output)_2026-05-11_10-52-16.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:53 System Audio (output)_2026-05-11_10-52-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:53 System Audio (output)_2026-05-11_10-53-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-53-45.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:54 System Audio (output)_2026-05-11_10-54-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:54 System Audio (output)_2026-05-11_10-54-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-54-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:55 System Audio (output)_2026-05-11_10-55-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-55-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:56 System Audio (output)_2026-05-11_10-56-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-56-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:57 System Audio (output)_2026-05-11_10-57-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:58 System Audio (output)_2026-05-11_10-57-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:58 System Audio (output)_2026-05-11_10-58-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-58-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 13:59 System Audio (output)_2026-05-11_10-59-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 13:59 System Audio (output)_2026-05-11_10-59-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:00 System Audio (output)_2026-05-11_10-59-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-07.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:00 System Audio (output)_2026-05-11_11-00-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-00-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:01 System Audio (output)_2026-05-11_11-01-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:02 System Audio (output)_2026-05-11_11-01-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-01-59.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:02 System Audio (output)_2026-05-11_11-02-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:03 System Audio (output)_2026-05-11_11-02-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:03 System Audio (output)_2026-05-11_11-03-28.mp4
-rw-r--r-- 1 lukas staff 11583 11 May 14:04 System Audio (output)_2026-05-11_11-03-51.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-13.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:04 System Audio (output)_2026-05-11_11-04-36.mp4
-rw-r--r-- 1 lukas staff 11255 11 May 14:05 System Audio (output)_2026-05-11_11-04-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:05 System Audio (output)_2026-05-11_11-05-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:06 System Audio (output)_2026-05-11_11-05-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:06 System Audio (output)_2026-05-11_11-06-28.mp4
-rw-r--r-- 1 lukas staff 11403 11 May 14:07 System Audio (output)_2026-05-11_11-06-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:07 System Audio (output)_2026-05-11_11-07-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:07 System Audio (output)_2026-05-11_11-07-35.mp4
-rw-r--r-- 1 lukas staff 11766 11 May 14:08 System Audio (output)_2026-05-11_11-07-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:08 System Audio (output)_2026-05-11_11-08-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-08-41.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-03.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:09 System Audio (output)_2026-05-11_11-09-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-09-48.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:10 System Audio (output)_2026-05-11_11-10-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:10 System Audio (output)_2026-05-11_11-10-33.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:11 System Audio (output)_2026-05-11_11-10-55.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:11 System Audio (output)_2026-05-11_11-11-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:12 System Audio (output)_2026-05-11_11-11-40.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-02.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:12 System Audio (output)_2026-05-11_11-12-24.mp4
-rw-r--r-- 1 lukas staff 13156 11 May 14:13 System Audio (output)_2026-05-11_11-12-47.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:13 System Audio (output)_2026-05-11_11-13-10.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:13 System Audio (output)_2026-05-11_11-13-32.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:14 System Audio (output)_2026-05-11_11-13-54.mp4
-rw-r--r-- 1 lukas staff 11489 11 May 14:14 System Audio (output)_2026-05-11_11-14-17.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:15 System Audio (output)_2026-05-11_11-14-39.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-01.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:15 System Audio (output)_2026-05-11_11-15-24.mp4
-rw-r--r-- 1 lukas staff 11720 11 May 14:16 System Audio (output)_2026-05-11_11-15-46.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-09.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:16 System Audio (output)_2026-05-11_11-16-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-16-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:17 System Audio (output)_2026-05-11_11-17-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-17-38.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:18 System Audio (output)_2026-05-11_11-18-00.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:18 System Audio (output)_2026-05-11_11-18-23.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-18-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:19 System Audio (output)_2026-05-11_11-19-30.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-19-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:20 System Audio (output)_2026-05-11_11-20-15.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-37.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:21 System Audio (output)_2026-05-11_11-20-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:21 System Audio (output)_2026-05-11_11-21-22.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-21-44.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:22 System Audio (output)_2026-05-11_11-22-07.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:22 System Audio (output)_2026-05-11_11-22-29.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-22-52.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-14.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:23 System Audio (output)_2026-05-11_11-23-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:24 System Audio (output)_2026-05-11_11-23-58.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:24 System Audio (output)_2026-05-11_11-24-20.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-24-43.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-05.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:25 System Audio (output)_2026-05-11_11-25-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-25-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:26 System Audio (output)_2026-05-11_11-26-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:26 System Audio (output)_2026-05-11_11-26-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:27 System Audio (output)_2026-05-11_11-26-56.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:27 System Audio (output)_2026-05-11_11-27-18.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-27-40.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-02.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:28 System Audio (output)_2026-05-11_11-28-25.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-28-47.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-09.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:29 System Audio (output)_2026-05-11_11-29-31.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-29-53.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:30 System Audio (output)_2026-05-11_11-30-16.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-30-38.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:31 System Audio (output)_2026-05-11_11-31-00.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:31 System Audio (output)_2026-05-11_11-31-23.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:32 System Audio (output)_2026-05-11_11-31-45.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-08.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:32 System Audio (output)_2026-05-11_11-32-30.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:33 System Audio (output)_2026-05-11_11-32-52.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:33 System Audio (output)_2026-05-11_11-33-15.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-37.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-33-59.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:34 System Audio (output)_2026-05-11_11-34-22.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:35 System Audio (output)_2026-05-11_11-34-44.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-06.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:35 System Audio (output)_2026-05-11_11-35-29.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-35-51.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-14.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:36 System Audio (output)_2026-05-11_11-36-36.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-36-58.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:37 System Audio (output)_2026-05-11_11-37-21.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:38 System Audio (output)_2026-05-11_11-37-43.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:38 System Audio (output)_2026-05-11_11-38-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:39 System Audio (output)_2026-05-11_11-38-50.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:39 System Audio (output)_2026-05-11_11-39-12.mp4
-rw-r--r-- 1 lukas staff 8643 11 May 14:39 System Audio (output)_2026-05-11_11-39-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:40 System Audio (output)_2026-05-11_11-39-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:40 System Audio (output)_2026-05-11_11-40-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-40-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:41 System Audio (output)_2026-05-11_11-41-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:42 System Audio (output)_2026-05-11_11-41-49.mp4
-rw-r--r-- 1 lukas staff 9362 11 May 14:42 System Audio (output)_2026-05-11_11-42-11.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:42 System Audio (output)_2026-05-11_11-42-34.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-42-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:43 System Audio (output)_2026-05-11_11-43-19.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:44 System Audio (output)_2026-05-11_11-43-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:44 System Audio (output)_2026-05-11_11-44-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-44-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:45 System Audio (output)_2026-05-11_11-45-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:46 System Audio (output)_2026-05-11_11-45-57.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:46 System Audio (output)_2026-05-11_11-46-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-46-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:47 System Audio (output)_2026-05-11_11-47-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-47-50.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:48 System Audio (output)_2026-05-11_11-48-12.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:48 System Audio (output)_2026-05-11_11-48-35.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-48-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:49 System Audio (output)_2026-05-11_11-49-20.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-49-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:50 System Audio (output)_2026-05-11_11-50-27.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-50-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:51 System Audio (output)_2026-05-11_11-51-12.mp4
-rw-r--r-- 1 lukas staff 8013 11 May 14:51 System Audio (output)_2026-05-11_11-51-34.mp4
-rw-r--r-- 1 lukas staff 7286 11 May 14:52 System Audio (output)_2026-05-11_11-51-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:52 System Audio (output)_2026-05-11_11-52-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-52-42.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:53 System Audio (output)_2026-05-11_11-53-05.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:53 System Audio (output)_2026-05-11_11-53-27.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:54 System Audio (output)_2026-05-11_11-53-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-12.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:54 System Audio (output)_2026-05-11_11-54-34.mp4
-rw-r--r-- 1 lukas staff 4628 11 May 14:55 System Audio (output)_2026-05-11_11-54-57.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:55 System Audio (output)_2026-05-11_11-55-19.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-55-42.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-04.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:56 System Audio (output)_2026-05-11_11-56-26.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-56-49.mp4
-rw-r--r-- 1 lukas staff 4620 11 May 14:57 System Audio (output)_2026-05-11_11-57-11.mp4
-rw-r--r-- 1 lukas staff 4620 11 May ...
|
26679
|
NULL
|
NULL
|
NULL
|
|
14577
|
647
|
4
|
2026-05-10T11:07:12.948908+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778411232948_m1.jpg...
|
iTerm2
|
sqlite3
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
audio_chunks 14
audio_transcriptions 0 audio_chunks 14
audio_transcriptions 0
speakers 0
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ps aux | grep screenpipe
lukas 34762 20.2 2.2 412647440 372816 s010 R+ 2:05pm 0:17.39 /Users/lukas/.npm/_npx/34665/lib/node_modules/screenpipe/node_modules/@screenpipe/cli-darwin-arm64/bin/screenpipe record --disable-audio --ignored-windows Boosteroid
lukas 34980 0.0 0.0 410743504 1712 s011 S+ 2:05pm 0:00.00 grep screenpipe
lukas 34665 0.0 0.0 411428000 3776 s010 S+ 2:05pm 0:00.10 node /Users/lukas/.nvm/versions/node/v14.15.4/bin/npx screenpipe@latest record --disable-audio --ignored-windows Boosteroid
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'
.headers on
.mode column
-- Recent transcriptions with speaker
SELECT
datetime(t.timestamp, '+3 hours') AS local_time,
s.name AS speaker,
substr(t.transcription, 1, 100) AS text
FROM audio_transcriptions t
LEFT JOIN speakers s ON t.speaker_id = s.id
ORDER BY t.timestamp DESC
LIMIT 20;
-- Daily volume (last 14 days)
SELECT
date(timestamp, '+3 hours') AS day,
COUNT(*) AS transcriptions,
COUNT(DISTINCT speaker_id) AS speakers,
ROUND(SUM(LENGTH(transcription)) / 1000.0, 1) AS kchars
FROM audio_transcriptions
WHERE timestamp >= date('now', '-14 days')
GROUP BY day
ORDER BY day DESC;
-- Distinct speakers seen (post-diarization)
SELECT id, name, COUNT(t.id) AS lines
FROM speakers s
LEFT JOIN audio_transcriptions t ON t.speaker_id = s.id
GROUP BY s.id ORDER BY lines DESC LIMIT 20;
SQL
Parse error near line 26: ambiguous column name: id
SELECT id, name, COUNT(t.id) AS lines FROM speakers s LEFT JOIN audio_transcri
^--- error here
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'
.headers on
.mode column
-- Schema check (column names vary by version)
.schema audio_chunks
-- All 14 chunks with timestamps
SELECT
id,
datetime(timestamp, '+3 hours') AS local_time,
file_path
FROM audio_chunks
ORDER BY timestamp DESC;
-- Speakers (qualified, fixes the ambiguity)
SELECT s.id, s.name, COUNT(t.id) AS lines
FROM speakers s
LEFT JOIN audio_transcriptions t ON t.speaker_id = s.id
GROUP BY s.id ORDER BY lines DESC LIMIT 20;
SQL
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
id local_time file_path
-- ------------------- ------------------------------------------------------------
14 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-30-47.mp4
13 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-30-47.mp4
12 2026-05-06 20:30:19 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-30-19.mp4
11 2026-05-06 20:30:18 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-30-18.mp4
10 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-29-49.mp4
9 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-29-49.mp4
8 2026-05-06 20:29:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-29-20.mp4
7 2026-05-06 20:29:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-29-19.mp4
6 2026-05-06 20:28:50 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-28-50.mp4
5 2026-05-06 20:28:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-28-49.mp4
4 2026-05-06 20:28:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-28-20.mp4
3 2026-05-06 20:28:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-28-19.mp4
2 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-27-47.mp4
1 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-27-47.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
sqlite3
Close Tab
-zsh
Close Tab
⌥⌘1
sqlite3...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"audio_chunks 14 \naudio_transcriptions 0 \nspeakers 0 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ps aux | grep screenpipe\nlukas 34762 20.2 2.2 412647440 372816 s010 R+ 2:05pm 0:17.39 /Users/lukas/.npm/_npx/34665/lib/node_modules/screenpipe/node_modules/@screenpipe/cli-darwin-arm64/bin/screenpipe record --disable-audio --ignored-windows Boosteroid\nlukas 34980 0.0 0.0 410743504 1712 s011 S+ 2:05pm 0:00.00 grep screenpipe\nlukas 34665 0.0 0.0 411428000 3776 s010 S+ 2:05pm 0:00.10 node /Users/lukas/.nvm/versions/node/v14.15.4/bin/npx screenpipe@latest record --disable-audio --ignored-windows Boosteroid\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'\n.headers on\n.mode column\n\n-- Recent transcriptions with speaker\nSELECT\n datetime(t.timestamp, '+3 hours') AS local_time,\n s.name AS speaker,\n substr(t.transcription, 1, 100) AS text\nFROM audio_transcriptions t\nLEFT JOIN speakers s ON t.speaker_id = s.id\nORDER BY t.timestamp DESC\nLIMIT 20;\n\n-- Daily volume (last 14 days)\nSELECT\n date(timestamp, '+3 hours') AS day,\n COUNT(*) AS transcriptions,\n COUNT(DISTINCT speaker_id) AS speakers,\n ROUND(SUM(LENGTH(transcription)) / 1000.0, 1) AS kchars\nFROM audio_transcriptions\nWHERE timestamp >= date('now', '-14 days')\nGROUP BY day\nORDER BY day DESC;\n\n-- Distinct speakers seen (post-diarization)\nSELECT id, name, COUNT(t.id) AS lines\nFROM speakers s\nLEFT JOIN audio_transcriptions t ON t.speaker_id = s.id\nGROUP BY s.id ORDER BY lines DESC LIMIT 20;\nSQL\nParse error near line 26: ambiguous column name: id\n SELECT id, name, COUNT(t.id) AS lines FROM speakers s LEFT JOIN audio_transcri\n ^--- error here\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'\n.headers on\n.mode column\n\n-- Schema check (column names vary by version)\n.schema audio_chunks\n\n-- All 14 chunks with timestamps\nSELECT\n id,\n datetime(timestamp, '+3 hours') AS local_time,\n file_path\nFROM audio_chunks\nORDER BY timestamp DESC;\n\n-- Speakers (qualified, fixes the ambiguity)\nSELECT s.id, s.name, COUNT(t.id) AS lines\nFROM speakers s\nLEFT JOIN audio_transcriptions t ON t.speaker_id = s.id\nGROUP BY s.id ORDER BY lines DESC LIMIT 20;\nSQL\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nid local_time file_path \n-- ------------------- ------------------------------------------------------------\n14 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-30-47.mp4 \n\n13 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-30-47.mp4 \n\n12 2026-05-06 20:30:19 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-30-19.mp4 \n\n11 2026-05-06 20:30:18 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-30-18.mp4 \n\n10 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-29-49.mp4 \n\n9 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-29-49.mp4 \n\n8 2026-05-06 20:29:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-29-20.mp4 \n\n7 2026-05-06 20:29:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-29-19.mp4 \n\n6 2026-05-06 20:28:50 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-28-50.mp4 \n\n5 2026-05-06 20:28:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-28-49.mp4 \n\n4 2026-05-06 20:28:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-28-20.mp4 \n\n3 2026-05-06 20:28:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-28-19.mp4 \n\n2 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-27-47.mp4 \n\n1 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-27-47.mp4 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"on_screen":true,"value":"audio_chunks 14 \naudio_transcriptions 0 \nspeakers 0 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ps aux | grep screenpipe\nlukas 34762 20.2 2.2 412647440 372816 s010 R+ 2:05pm 0:17.39 /Users/lukas/.npm/_npx/34665/lib/node_modules/screenpipe/node_modules/@screenpipe/cli-darwin-arm64/bin/screenpipe record --disable-audio --ignored-windows Boosteroid\nlukas 34980 0.0 0.0 410743504 1712 s011 S+ 2:05pm 0:00.00 grep screenpipe\nlukas 34665 0.0 0.0 411428000 3776 s010 S+ 2:05pm 0:00.10 node /Users/lukas/.nvm/versions/node/v14.15.4/bin/npx screenpipe@latest record --disable-audio --ignored-windows Boosteroid\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'\n.headers on\n.mode column\n\n-- Recent transcriptions with speaker\nSELECT\n datetime(t.timestamp, '+3 hours') AS local_time,\n s.name AS speaker,\n substr(t.transcription, 1, 100) AS text\nFROM audio_transcriptions t\nLEFT JOIN speakers s ON t.speaker_id = s.id\nORDER BY t.timestamp DESC\nLIMIT 20;\n\n-- Daily volume (last 14 days)\nSELECT\n date(timestamp, '+3 hours') AS day,\n COUNT(*) AS transcriptions,\n COUNT(DISTINCT speaker_id) AS speakers,\n ROUND(SUM(LENGTH(transcription)) / 1000.0, 1) AS kchars\nFROM audio_transcriptions\nWHERE timestamp >= date('now', '-14 days')\nGROUP BY day\nORDER BY day DESC;\n\n-- Distinct speakers seen (post-diarization)\nSELECT id, name, COUNT(t.id) AS lines\nFROM speakers s\nLEFT JOIN audio_transcriptions t ON t.speaker_id = s.id\nGROUP BY s.id ORDER BY lines DESC LIMIT 20;\nSQL\nParse error near line 26: ambiguous column name: id\n SELECT id, name, COUNT(t.id) AS lines FROM speakers s LEFT JOIN audio_transcri\n ^--- error here\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'\n.headers on\n.mode column\n\n-- Schema check (column names vary by version)\n.schema audio_chunks\n\n-- All 14 chunks with timestamps\nSELECT\n id,\n datetime(timestamp, '+3 hours') AS local_time,\n file_path\nFROM audio_chunks\nORDER BY timestamp DESC;\n\n-- Speakers (qualified, fixes the ambiguity)\nSELECT s.id, s.name, COUNT(t.id) AS lines\nFROM speakers s\nLEFT JOIN audio_transcriptions t ON t.speaker_id = s.id\nGROUP BY s.id ORDER BY lines DESC LIMIT 20;\nSQL\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nid local_time file_path \n-- ------------------- ------------------------------------------------------------\n14 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-30-47.mp4 \n\n13 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-30-47.mp4 \n\n12 2026-05-06 20:30:19 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-30-19.mp4 \n\n11 2026-05-06 20:30:18 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-30-18.mp4 \n\n10 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-29-49.mp4 \n\n9 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-29-49.mp4 \n\n8 2026-05-06 20:29:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-29-20.mp4 \n\n7 2026-05-06 20:29:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-29-19.mp4 \n\n6 2026-05-06 20:28:50 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-28-50.mp4 \n\n5 2026-05-06 20:28:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-28-49.mp4 \n\n4 2026-05-06 20:28:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-28-20.mp4 \n\n3 2026-05-06 20:28:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-28-19.mp4 \n\n2 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-\n 06_17-27-47.mp4 \n\n1 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)\n _2026-05-06_17-27-47.mp4 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sqlite3","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":1,"bounds":{"left":0.4826389,"top":0.033333335,"width":0.034027778,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-1357743077395361913
|
-4176792565555113375
|
click
|
accessibility
|
NULL
|
audio_chunks 14
audio_transcriptions 0 audio_chunks 14
audio_transcriptions 0
speakers 0
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ps aux | grep screenpipe
lukas 34762 20.2 2.2 412647440 372816 s010 R+ 2:05pm 0:17.39 /Users/lukas/.npm/_npx/34665/lib/node_modules/screenpipe/node_modules/@screenpipe/cli-darwin-arm64/bin/screenpipe record --disable-audio --ignored-windows Boosteroid
lukas 34980 0.0 0.0 410743504 1712 s011 S+ 2:05pm 0:00.00 grep screenpipe
lukas 34665 0.0 0.0 411428000 3776 s010 S+ 2:05pm 0:00.10 node /Users/lukas/.nvm/versions/node/v14.15.4/bin/npx screenpipe@latest record --disable-audio --ignored-windows Boosteroid
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'
.headers on
.mode column
-- Recent transcriptions with speaker
SELECT
datetime(t.timestamp, '+3 hours') AS local_time,
s.name AS speaker,
substr(t.transcription, 1, 100) AS text
FROM audio_transcriptions t
LEFT JOIN speakers s ON t.speaker_id = s.id
ORDER BY t.timestamp DESC
LIMIT 20;
-- Daily volume (last 14 days)
SELECT
date(timestamp, '+3 hours') AS day,
COUNT(*) AS transcriptions,
COUNT(DISTINCT speaker_id) AS speakers,
ROUND(SUM(LENGTH(transcription)) / 1000.0, 1) AS kchars
FROM audio_transcriptions
WHERE timestamp >= date('now', '-14 days')
GROUP BY day
ORDER BY day DESC;
-- Distinct speakers seen (post-diarization)
SELECT id, name, COUNT(t.id) AS lines
FROM speakers s
LEFT JOIN audio_transcriptions t ON t.speaker_id = s.id
GROUP BY s.id ORDER BY lines DESC LIMIT 20;
SQL
Parse error near line 26: ambiguous column name: id
SELECT id, name, COUNT(t.id) AS lines FROM speakers s LEFT JOIN audio_transcri
^--- error here
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'
.headers on
.mode column
-- Schema check (column names vary by version)
.schema audio_chunks
-- All 14 chunks with timestamps
SELECT
id,
datetime(timestamp, '+3 hours') AS local_time,
file_path
FROM audio_chunks
ORDER BY timestamp DESC;
-- Speakers (qualified, fixes the ambiguity)
SELECT s.id, s.name, COUNT(t.id) AS lines
FROM speakers s
LEFT JOIN audio_transcriptions t ON t.speaker_id = s.id
GROUP BY s.id ORDER BY lines DESC LIMIT 20;
SQL
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME, evicted_at TIMESTAMP DEFAULT NULL);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
id local_time file_path
-- ------------------- ------------------------------------------------------------
14 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-30-47.mp4
13 2026-05-06 20:30:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-30-47.mp4
12 2026-05-06 20:30:19 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-30-19.mp4
11 2026-05-06 20:30:18 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-30-18.mp4
10 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-29-49.mp4
9 2026-05-06 20:29:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-29-49.mp4
8 2026-05-06 20:29:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-29-20.mp4
7 2026-05-06 20:29:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-29-19.mp4
6 2026-05-06 20:28:50 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-28-50.mp4
5 2026-05-06 20:28:49 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-28-49.mp4
4 2026-05-06 20:28:20 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-28-20.mp4
3 2026-05-06 20:28:19 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-28-19.mp4
2 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/System Audio (output)_2026-05-
06_17-27-47.mp4
1 2026-05-06 20:27:47 /Users/lukas/.screenpipe/data/MacBook Pro Microphone (input)
_2026-05-06_17-27-47.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
sqlite3
Close Tab
-zsh
Close Tab
⌥⌘1
sqlite3...
|
14575
|
NULL
|
NULL
|
NULL
|
|
14650
|
651
|
8
|
2026-05-10T18:10:39.170976+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778436639170_m1.jpg...
|
iTerm2
|
sqlite3
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Fri May 8 22:00:18 on ttys012
Poetry Last login: Fri May 8 22:00:18 on ttys012
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'
.headers on
.mode column
SELECT 'ocr_text' AS t, COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08')
UNION ALL SELECT 'elements', COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08');
SQL
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
ssh
Close Tab
sqlite3
Close Tab
⌥⌘1
sqlite3...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Fri May 8 22:00:18 on ttys012\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'\n.headers on\n.mode column\nSELECT 'ocr_text' AS t, COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08')\nUNION ALL SELECT 'elements', COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08');\nSQL","depth":4,"bounds":{"left":0.0,"top":0.08777778,"width":1.0,"height":0.9122222},"on_screen":true,"lines":[{"char_start":0,"char_count":43,"bounds":{"left":0.0034722222,"top":0.08777778,"width":0.23888889,"height":0.02}},{"char_start":43,"char_count":1,"bounds":{"left":0.0034722222,"top":0.107777774,"width":0.0055555557,"height":0.02}},{"char_start":44,"char_count":75,"bounds":{"left":0.0034722222,"top":0.12777779,"width":0.41666666,"height":0.02}},{"char_start":119,"char_count":1,"bounds":{"left":0.0034722222,"top":0.14777778,"width":0.0055555557,"height":0.02}},{"char_start":120,"char_count":75,"bounds":{"left":0.0034722222,"top":0.16777778,"width":0.41666666,"height":0.02}},{"char_start":195,"char_count":85,"bounds":{"left":0.0034722222,"top":0.18777777,"width":0.4722222,"height":0.02}},{"char_start":280,"char_count":12,"bounds":{"left":0.0034722222,"top":0.20777778,"width":0.06666667,"height":0.02}},{"char_start":292,"char_count":13,"bounds":{"left":0.0034722222,"top":0.22777778,"width":0.072222225,"height":0.02}},{"char_start":305,"char_count":126,"bounds":{"left":0.0034722222,"top":0.24777777,"width":0.7,"height":0.02}},{"char_start":431,"char_count":132,"bounds":{"left":0.0034722222,"top":0.26777777,"width":0.73333335,"height":0.02}},{"char_start":563,"char_count":3,"bounds":{"left":0.0034722222,"top":0.28777778,"width":0.016666668,"height":0.02}}],"value":"Last login: Fri May 8 22:00:18 on ttys012\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'\n.headers on\n.mode column\nSELECT 'ocr_text' AS t, COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08')\nUNION ALL SELECT 'elements', COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08');\nSQL","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sqlite3","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"on_screen":true,"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":1,"bounds":{"left":0.4826389,"top":0.033333335,"width":0.034027778,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-8865685647383379576
|
-972253968636670972
|
visual_change
|
accessibility
|
NULL
|
Last login: Fri May 8 22:00:18 on ttys012
Poetry Last login: Fri May 8 22:00:18 on ttys012
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite <<'SQL'
.headers on
.mode column
SELECT 'ocr_text' AS t, COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08')
UNION ALL SELECT 'elements', COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-05-08');
SQL
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
ssh
Close Tab
sqlite3
Close Tab
⌥⌘1
sqlite3...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
14627
|
649
|
13
|
2026-05-10T11:44:50.254573+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778413490254_m1.jpg...
|
QuickTime Player
|
soundcore AeroClip (input)_2026-05-10_11-11-35.mp4
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
00:00
toggle elapsed time, timecode and framecount 00:00
toggle elapsed time, timecode and framecount
00:30
toggle duration and remaining time
rewind
play/pause
fast forward
show external playback menu
show external playback menu
mute
document actions
soundcore AeroClip (input)_2026-05-10_11-11-35.mp4...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"00:00","depth":1,"bounds":{"left":0.041666668,"top":0.112222224,"width":0.02638889,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"toggle elapsed time, timecode and framecount","depth":1,"bounds":{"left":0.043055557,"top":0.112222224,"width":0.023611112,"height":0.016666668},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"00:30","depth":1,"bounds":{"left":0.23923612,"top":0.112222224,"width":0.031597223,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"toggle duration and remaining time","depth":1,"bounds":{"left":0.240625,"top":0.112222224,"width":0.028819444,"height":0.016666668},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"rewind","depth":1,"bounds":{"left":0.11388889,"top":0.14888889,"width":0.017361112,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXCheckBox","text":"play/pause","depth":1,"bounds":{"left":0.14618056,"top":0.1388889,"width":0.02013889,"height":0.037777778},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"fast forward","depth":1,"bounds":{"left":0.18159722,"top":0.14888889,"width":0.017361112,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"show external playback menu","depth":1,"bounds":{"left":0.22222222,"top":0.14666666,"width":0.013888889,"height":0.022222223},"on_screen":true,"role_description":"button","is_focused":false},{"role":"AXButton","text":"show external playback menu","depth":2,"bounds":{"left":0.22222222,"top":0.14666666,"width":0.013888889,"height":0.022222223},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"mute","depth":1,"bounds":{"left":0.043055557,"top":0.18277778,"width":0.015625,"height":0.016666668},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXMenuButton","text":"document actions","depth":1,"bounds":{"left":0.26666668,"top":0.08888889,"width":0.0069444445,"height":0.017777778},"on_screen":true,"role_description":"menu button","is_enabled":false,"is_focused":false},{"role":"AXStaticText","text":"soundcore AeroClip (input)_2026-05-10_11-11-35.mp4","depth":1,"bounds":{"left":0.09375,"top":0.08888889,"width":0.17291667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-8233949225777210139
|
5952614695426588981
|
click
|
accessibility
|
NULL
|
00:00
toggle elapsed time, timecode and framecount 00:00
toggle elapsed time, timecode and framecount
00:30
toggle duration and remaining time
rewind
play/pause
fast forward
show external playback menu
show external playback menu
mute
document actions
soundcore AeroClip (input)_2026-05-10_11-11-35.mp4...
|
NULL
|
/Users/lukas/.screenpipe/data/soundcore AeroClip ( /Users/lukas/.screenpipe/data/soundcore AeroClip (input)_2026-05-10_11-11-35.mp4...
|
NULL
|
NULL
|
|
14628
|
649
|
14
|
2026-05-10T11:44:52.801263+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778413492801_m1.jpg...
|
QuickTime Player
|
soundcore AeroClip (input)_2026-05-10_11-11-35.mp4
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
00:01
toggle elapsed time, timecode and framecount 00:01
toggle elapsed time, timecode and framecount
00:30
toggle duration and remaining time
rewind
play/pause
fast forward
show external playback menu
show external playback menu
mute
document actions
soundcore AeroClip (input)_2026-05-10_11-11-35.mp4...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"00:01","depth":1,"bounds":{"left":0.041666668,"top":0.112222224,"width":0.02638889,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"toggle elapsed time, timecode and framecount","depth":1,"bounds":{"left":0.043055557,"top":0.112222224,"width":0.023611112,"height":0.016666668},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"00:30","depth":1,"bounds":{"left":0.23923612,"top":0.112222224,"width":0.031597223,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXCheckBox","text":"toggle duration and remaining time","depth":1,"bounds":{"left":0.240625,"top":0.112222224,"width":0.028819444,"height":0.016666668},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"rewind","depth":1,"bounds":{"left":0.11388889,"top":0.14888889,"width":0.017361112,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXCheckBox","text":"play/pause","depth":1,"bounds":{"left":0.14618056,"top":0.1388889,"width":0.02013889,"height":0.037777778},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"fast forward","depth":1,"bounds":{"left":0.18159722,"top":0.14888889,"width":0.017361112,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"show external playback menu","depth":1,"bounds":{"left":0.22222222,"top":0.14666666,"width":0.013888889,"height":0.022222223},"on_screen":true,"role_description":"button","is_focused":false},{"role":"AXButton","text":"show external playback menu","depth":2,"bounds":{"left":0.22222222,"top":0.14666666,"width":0.013888889,"height":0.022222223},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"mute","depth":1,"bounds":{"left":0.043055557,"top":0.18277778,"width":0.015625,"height":0.016666668},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXMenuButton","text":"document actions","depth":1,"bounds":{"left":0.26666668,"top":0.08888889,"width":0.0069444445,"height":0.017777778},"on_screen":true,"role_description":"menu button","is_enabled":false,"is_focused":false},{"role":"AXStaticText","text":"soundcore AeroClip (input)_2026-05-10_11-11-35.mp4","depth":1,"bounds":{"left":0.09375,"top":0.08888889,"width":0.17291667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-5388724590689216160
|
5952614695426588981
|
visual_change
|
accessibility
|
NULL
|
00:01
toggle elapsed time, timecode and framecount 00:01
toggle elapsed time, timecode and framecount
00:30
toggle duration and remaining time
rewind
play/pause
fast forward
show external playback menu
show external playback menu
mute
document actions
soundcore AeroClip (input)_2026-05-10_11-11-35.mp4...
|
14627
|
/Users/lukas/.screenpipe/data/soundcore AeroClip ( /Users/lukas/.screenpipe/data/soundcore AeroClip (input)_2026-05-10_11-11-35.mp4...
|
NULL
|
NULL
|
|
13081
|
582
|
5
|
2026-05-09T10:14:36.086216+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778321676086_m2.jpg...
|
Code
|
sms_export.json — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about th...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.13168396,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.14924182,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.16679968,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.030917553,"top":0.18435754,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"reimport_sms.sh","depth":27,"bounds":{"left":0.03125,"top":0.20111732,"width":0.033909574,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.2019154,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.032912236,"top":0.2019154,"width":0.032247342,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.21947326,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.23703113,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.254589,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.254589,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.27214685,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.030917553,"top":0.2897047,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3064645,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"bounds":{"left":0.028590426,"top":0.32402235,"width":0.01462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029920213,"top":0.32482043,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.3415802,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.028590426,"top":0.3415802,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.030917553,"top":0.3423783,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.35913807,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.35913807,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.35993615,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.35993615,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.37669593,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.37669593,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.377494,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.377494,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.3926576,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.3942538,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.39505187,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.39505187,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.4102155,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.41181165,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.41260973,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.41260973,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.42777336,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.4293695,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.4301676,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.4301676,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.44533122,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"bounds":{"left":0.028590426,"top":0.44692737,"width":0.014295213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.44772545,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03158245,"top":0.44772545,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.46288908,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.46448523,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.46528333,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.46528333,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.48044693,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.028590426,"top":0.4820431,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0625,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.17785904,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"bounds":{"left":0.21775267,"top":0.047885075,"width":0.046210106,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"bounds":{"left":0.26396278,"top":0.047885075,"width":0.046875,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.31050533,"top":0.047885075,"width":0.053523935,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14527926,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.19082446,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"bounds":{"left":0.19614361,"top":0.07821229,"width":0.003656915,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":28,"bounds":{"left":0.13996011,"top":0.0933759,"width":0.41788563,"height":0.014365523},"on_screen":true,"value":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":29,"bounds":{"left":0.13996011,"top":0.09497207,"width":0.41788563,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Design new payment-logge…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.07912234,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"JSON","depth":16,"bounds":{"left":0.94980055,"top":0.98244214,"width":0.012965426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9424867,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9318484,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.91456115,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.890625,"top":0.98244214,"width":0.021941489,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 1, Col 1","depth":16,"bounds":{"left":0.8646942,"top":0.98244214,"width":0.023936171,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"expanded","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"I'll explore all three reference projects in parallel to understand their structure before planning.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How data flows (ingest, storage, retrieval)\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How file uploads work - what files, what format, how parsed\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about the data model and what fields are stored.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth folder and authentik integration","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. What auth system is being used (Authentik)\n2. How authentication/authorization is implemented - OAuth2, OIDC, session tokens, JWT?\n3. Middleware - how is auth enforced on routes?\n4. Any frontend auth flow - login redirect, token handling, protected routes\n5. Environment variables related to auth\n6. Docker/deployment setup for the auth service itself\n7. Any example of how other apps integrate with this auth\n\nReport with: directory structure, auth flow description, middleware code, environment variable names, and integration patterns. This is a reference for building auth into a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"continue","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Launching parallel exploration of all three reference projects.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How data is ingested (look at /ingest route especially)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How file uploads work (what format, what processing happens)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth project structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. What authentication system is used (authentik integration details)\n3. How OAuth/OIDC flow works\n4. Any middleware or helper functions for protecting routes\n5. Session management approach\n6. How frontend handles auth state\n7. Any example of how other apps integrate with this auth system\n8. Docker setup and environment variables\n\nPlease read all files carefully - this auth system will be integrated into a new combined app. I need to understand exactly how to use it.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of all three. Let me design the plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design combined app architecture","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design a detailed implementation plan for a new combined web app that merges two existing applications. Here is full context:\n\n---\n\n## App 1: payments-logger (Node.js)\n- **Purpose**: Ingest Bulgarian bank SMS → parse → store in PostgreSQL → review/tag/notify in React UI\n- **Stack**: Node.js 20 + Express + Prisma 5 + PostgreSQL 16 + React 18 + Vite + Tailwind CSS\n- **Auth**: Custom JWT (bcryptjs + jose), tokens in localStorage\n- **Ingest**: POST /api/payments/ingest (public) — SMS text OR structured JSON (Apple Wallet)\n- **Schema** (PostgreSQL via Prisma):\n - `payments` table: id, raw_message, date, type (POS/ATM/INTERNET/ECOM/P2P/WALLET), card, recipient, amount, balance, status (UNPROCESSED/SENT/SKIPPED), notifyPhone, notifiedAt, created_at, updated_at\n - `tags` table: id, name, color — M2M with payments via `_PaymentToTag`\n - `users` table: id, username, hashed_password (this will be REMOVED)\n- **UI**: Single-page React app — PaymentTable (sortable, filterable, taggable), FilterBar, status actions (send/skip), notification system\n- **Parser** (backend/src/parser.js): Regex parser for Bulgarian DSK Bank SMS, extracts date/time (DD/MM/YYYY HH:MM), card mask, transaction type, recipient, amount, balance\n\n## App 2: dsk-uploader (Python/Flask)\n- **Purpose**: Upload DSK bank CSV exports → parse/normalize → upload to Notion database\n- **Stack**: Python 3.11 + Flask + Pandas + Custom Notion SDK + Bootstrap 5\n- **Auth**: None (open)\n- **CSV format** (DSK Bank Bulgarian format, columns):\n - `Дата` (date, DD.MM.YYYY)\n - `Вид на трансакцията` (transaction type, Bulgarian)\n - `Основание` (reason/description — contains card number regex: `^\\d{6}x{6}\\d{4}$`)\n - `Дебит BGN` (debit amount, may be empty)\n - `Кредит BGN` (credit amount, may be empty)\n - `Наредител/Получател` (orderer/recipient name)\n - `Номер сметка на наредителя / получателя` (account number)\n- **Processing**: merge multiple CSVs, normalize dates, extract card numbers from reason via regex, auto-generate tags (keyword heuristics: ЗАПЛАТА→Salary, NETFLIX→Subscriptions, etc.), filter internal transfers\n- **Output**: Notion database pages (this will be REPLACED with local PostgreSQL)\n\n## App 3: auth (Authentik)\n- **Mode**: Proxy mode via NPM (forward auth)\n- **How it works**: NPM intercepts all requests, calls Authentik outpost's auth endpoint. On success, NPM injects headers into proxied request:\n - `X-authentik-username` \n - `X-authentik-email`\n - `X-authentik-groups`\n- **No code integration needed** in the app itself — just trust these headers from NPM\n- **Logout**: Redirect user to `/outpost.goauthentik.io/sign_out`\n\n---\n\n## What the New Combined App Must Do\n\n1. **Single PostgreSQL database** for all transactions\n2. **SMS Ingest** (public endpoint) — same as payments-logger /ingest, source=INGEST\n3. **CSV Upload** (authenticated) — parse DSK CSV files, store transactions with source=UPLOAD into the same DB schema\n4. **Unified UI** — show all payments in one table regardless of source\n5. **Source indicator** in UI — badge showing \"INGEST\", \"UPLOAD\", or \"BOTH\" (if duplicate detection added)\n6. **Source filter** in FilterBar — filter by All/Ingest/Upload\n7. **Authentik auth** — remove custom JWT entirely; trust X-authentik-* headers from NPM\n8. **All existing payments-logger features**: tagging, send notification, skip, status tracking, filters, sorting, pagination\n9. **Remove Notion dependency entirely** — all data stays in local PostgreSQL\n\n---\n\n## Technical Constraints\n\n- Keep Node.js backend (not Python) — extend payments-logger's stack\n- CSV parsing: use `csv-parse` npm package (handles encoding, streaming)\n- File upload: use `multer` npm middleware\n- Auth middleware: read X-authentik-username header, 401 if missing (but /api/payments/ingest stays public)\n- Add `source` enum field (INGEST/UPLOAD) to payments schema\n- Add `currency` field (EUR for SMS ingest, BGN for CSV uploads) — or just store as-is\n- Remove `users` table from schema\n\n---\n\n## Please Design\n\n1. Complete folder structure for the new app (suggest name: \"finance-hub\" or similar — note this is a placeholder, user will confirm)\n2. Prisma schema with new fields (`source`, `currency`)\n3. All backend API routes\n4. CSV parser design in Node.js (port of the Python logic)\n5. Authentik auth middleware\n6. Frontend component structure (React) — what's reused from payments-logger, what's new\n7. Docker Compose setup\n8. Environment variables needed\n9. Step-by-step implementation order\n10. Verification checklist\n\nBe specific about file paths and code structure. This will be used to write actual implementation code.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good plan. Let me ask the one thing I need before writing the final plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskUserQuestion","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"User has answered your questions: \"What should the new combined app be called? This will be the folder name under /volume2/docker/finance/ and the app branding.\"=\"finance-hub\". You can now continue with the user's answers in mind.","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Writing the final plan now.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"326 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# finance-hub — Implementation Plan\n\n## Context\n\nTwo separate finance apps exist as references and will be retired:\n- **payments-logger** (Node.js/React): Ingests Bulgarian bank SMS notifications, stores payments in PostgreSQL, provides a review/tag/notify UI.\n- **dsk-uploader** (Python/Flask): Uploads DSK bank CSV exports, parses them, sends to Notion.\n\nThe new app **finance-hub** (`/volume2/docker/finance/finance-hub/`) replaces both with a single unified system: all transactions (SMS-ingested and CSV-uploaded) land in one PostgreSQL database and one React UI. Authentication is delegated entirely to Authentik (proxy mode via NPM — no custom JWT).\n\n---\n\n## Tech Stack\n\n| Layer | Choice | Rationale |\n|-------|--------|-----------|\n| Backend | Node.js 20 + Express + Prisma 5 | Extends payments-logger; no Python needed |\n| CSV parsing | `csv-parse` + `iconv-lite` | Handles Bulgarian cp1251 encoding, RFC4180 quoted fields |\n| File upload | `multer` (memory storage) | Bank CSVs are small (<500 KB), no disk cleanup needed |\n| Database | PostgreSQL 16 | Same as payments-logger |\n| Frontend | React 18 + Vite + Tailwind CSS + Lucide React | Same as payments-logger |\n| Auth | Authentik proxy via NPM headers | No custom JWT; removes users table entirely |\n| Container | Docker Compose | Same pattern as both reference apps |\n\n**Removed vs payments-logger:** `bcryptjs`, `jose`, `users` table, login form, JWT storage. \n**Removed vs dsk-uploader:** Python/Flask, Pandas, Notion SDK, all Notion references. \n**Added:** `csv-parse`, `iconv-lite`, `multer`, `source` + `currency` fields, `UploadPanel` component.\n\n---\n\n## Folder Structure\n\n```\n/volume2/docker/finance/finance-hub/\n├── docker-compose.yml\n├── .env\n├── .env.example\n├── .gitignore\n├── backend/\n│ ├── Dockerfile\n│ ├── package.json\n│ ├── prisma/\n│ │ ├── schema.prisma\n│ │ └── migrations/\n│ │ ├── migration_lock.toml\n│ │ └── 20260508_init/\n│ │ └── migration.sql\n│ └── src/\n│ ├── index.js ← entry point (Authentik middleware wired here)\n│ ├── auth.js ← Authentik header middleware (replaces JWT auth)\n│ ├── parser.js ← SMS parser (copy verbatim from payments-logger)\n│ ├── csvParser.js ← NEW: DSK CSV parser (port of Python dskuploader.py)\n│ └── routes/\n│ ├── payments.js ← existing routes + source/currency additions\n│ └── upload.js ← NEW: POST /api/upload/csv\n└── frontend/\n ├── Dockerfile\n ├── package.json\n ├── vite.config.js\n ├── tailwind.config.js\n ├── postcss.config.js\n ├── index.html\n └── src/\n ├── main.jsx ← remove AuthProvider wrapper\n ├── index.css\n ├── App.jsx ← remove auth state, add Upload tab toggle\n └── components/\n ├── FilterBar.jsx ← add source filter select\n ├── PaymentTable.jsx ← add Source badge column + currency display\n ├── PaymentCard.jsx ← minor source badge addition\n ├── PaymentList.jsx ← unchanged\n └── UploadPanel.jsx ← NEW: drag-and-drop CSV upload UI\n```\n\n---\n\n## Database Schema (Prisma)\n\nFile: `backend/prisma/schema.prisma`\n\n```prisma\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status { UNPROCESSED SENT SKIPPED }\nenum Source { INGEST UPLOAD }\n```\n\n**Key decisions:**\n- No `User` model — Authentik owns identity.\n- `currency`: `EUR` for SMS ingest, `BGN` for CSV uploads.\n- `debitBgn`, `creditBgn`, `transactionType`, `payerAccount`: nullable CSV-only columns; INGEST rows store nulls. Avoids a union query for the unified list view.\n- `balance` is always null for CSV rows (DSK export does not include running balance).\n- Fresh consolidated migration — no data migration from reference apps required.\n\n---\n\n## API Routes\n\n| Method | Path | Auth | Description |\n|--------|------|------|-------------|\n| GET | /api/health | public | Health check |\n| POST | /api/payments/ingest | public | SMS or structured ingest (source=INGEST) |\n| GET | /api/payments | required | List with filters/sort/pagination (+ source filter) |\n| GET | /api/payments/meta/tags | required | All tags |\n| GET | /api/payments/meta/filters | required | Filter options incl. `sources` array |\n| GET | /api/payments/:id | required | Single payment |\n| PATCH | /api/payments/:id | required | Update status |\n| DELETE | /api/payments/:id | required | Delete |\n| POST | /api/payments/:id/send | required | Send notification |\n| POST | /api/payments/:id/skip | required | Skip |\n| POST | /api/payments/:id/tags | required | Add/upsert tag |\n| DELETE | /api/payments/:id/tags/:tagId | required | Remove tag |\n| POST | /api/upload/csv | required | DSK CSV file upload (source=UPLOAD) |\n\n---\n\n## Key Implementation Details\n\n### auth.js (replaces entire old auth module)\n```js\nconst PUBLIC_PATHS = new Set(['/api/health', '/api/payments/ingest']);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n const username = req.headers['x-authentik-username'];\n if (!username) return res.status(401).json({ error: 'Unauthorized' });\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '').split(',').map(g => g.trim()).filter(Boolean),\n };\n next();\n}\nmodule.exports = { authentikMiddleware };\n```\n\n### csvParser.js (port of dskuploader.py)\n- `iconv-lite` decodes buffer as cp1251 (DSK Bank export encoding), falls back to UTF-8\n- `csv-parse` parses the decoded text with `columns: true`\n- Columns: `Дата`, `Вид на трансакцията`, `Основание`, `Дебит BGN`, `Кредит BGN`, `Наредител/Получател`, `Номер сметка на наредителя / получателя`\n- Card extraction: regex `/^\\d{6}x{6}\\d{4}$/` on first token of `Основание`\n- Skips rows where `Вид на трансакцията === 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ'`\n- Auto-tags via keyword rules (ЗАПЛАТА→Salary, LIDL→Groceries, NETFLIX→Subscriptions, etc.) — same logic as Python `generate_tags()`\n- Returns `{ rows: PaymentData[], skipped: number, errors: string[] }`\n\n### payments.js changes from payments-logger\n1. Add `source: 'INGEST'` and `currency` to the `/ingest` create call\n2. Add `source` to the `GET /` where clause filter\n3. Add `sources` to `meta/filters` response\n4. Currency-aware amount formatting in notification message\n5. Remove all JWT/auth references (no `/auth/register`, `/auth/login`)\n\n### upload.js (new)\n- `multer` memory storage, max 10 files × 10 MB\n- Calls `parseDskCsv(buffer)` per file\n- Upserts tags via `prisma.tag.upsert` then connects\n- Returns `{ imported, skipped, errors, payments[] }`\n\n### Frontend changes\n- **Delete**: `auth.js`, `AuthProvider.jsx`\n- **main.jsx**: Remove `<AuthProvider>` wrapper\n- **App.jsx**: Replace `authFetch` with plain `fetch` (Authentik session cookie travels automatically); logout → `window.location.href = '/outpost.goauthentik.io/sign_out'`; add \"Payments\" / \"Upload CSV\" tab toggle\n- **FilterBar.jsx**: Add source `<select>` (All / SMS Ingest / CSV Upload); widen grid to 5 cols\n- **PaymentTable.jsx**: Add `Source` column with `SMS` (indigo) / `CSV` (emerald) badge; show `${amount} ${currency}` in amount cell\n- **UploadPanel.jsx** (new): Drag-and-drop zone + file list + import button + result summary with error accordion; calls `POST /api/upload/csv` with `FormData`\n\n---\n\n## Docker Compose\n\n```yaml\nservices:\n db:\n image: postgres:16-alpine\n environment: { POSTGRES_USER: finance, POSTGRES_PASSWORD: ${DB_PASSWORD}, POSTGRES_DB: finance_hub }\n volumes: [pgdata:/var/lib/postgresql/data]\n healthcheck: { test: pg_isready -U finance -d finance_hub, interval: 5s }\n\n backend:\n build: ./backend\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports: [\"${BACKEND_PORT:-3001}:3001\"]\n depends_on: { db: { condition: service_healthy } }\n\n frontend:\n build: ./frontend\n ports: [\"${FRONTEND_PORT:-5175}:5173\"]\n depends_on: [backend]\n\nvolumes: { pgdata: }\n```\n\n**NPM setup:** Frontend port proxied through Authentik forward auth. Backend port exposed separately (unprotected) so the public `/api/payments/ingest` remains reachable by iOS Shortcuts / SMS gateways without login.\n\n---\n\n## Environment Variables (.env)\n\n```bash\nDB_PASSWORD=change_me\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\nTZ=Europe/Sofia\nBACKEND_PORT=3001\nFRONTEND_PORT=5175\n```\n\nRemoved vs payments-logger: `JWT_SECRET`, `JWT_EXPIRE_MINUTES`.\n\n---\n\n## Implementation Order\n\n1. Create folder structure and write `docker-compose.yml`, `.env.example`, `.gitignore`\n2. Write `backend/prisma/schema.prisma` and migration SQL\n3. Write `backend/package.json` (add `csv-parse`, `iconv-lite`, `multer`; remove `bcryptjs`, `jose`)\n4. Write `backend/Dockerfile`\n5. Write `backend/src/auth.js` (Authentik middleware)\n6. Copy `backend/src/parser.js` verbatim from payments-logger\n7. Write `backend/src/csvParser.js` (Python port)\n8. Write `backend/src/routes/upload.js`\n9. Write `backend/src/routes/payments.js` (from payments-logger + 5 changes listed above)\n10. Write `backend/src/index.js`\n11. Copy frontend base from payments-logger; delete `auth.js` + `AuthProvider.jsx`\n12. Update `main.jsx`, `App.jsx`, `FilterBar.jsx`, `PaymentTable.jsx`\n13. Write `frontend/src/components/UploadPanel.jsx`\n14. Update `frontend/vite.config.js`\n15. `docker compose build && docker compose up -d`\n16. Run verification checklist\n\n---\n\n## Verification\n\n**Schema**\n- `payments` table has `source`, `currency`, `debit_bgn`, `credit_bgn`, `transaction_type`, `payer_account`\n- No `users` table; `Source` enum exists\n\n**Auth**\n- `GET /api/payments` → 401 without `x-authentik-username` header\n- `POST /api/payments/ingest` → 201 without any header\n- `curl -H \"x-authentik-username: test\" localhost:3001/api/payments` → 200\n\n**SMS Ingest**\n- DSK POS SMS → `source=INGEST`, `currency=EUR`, correct amount/card/recipient\n- Apple Wallet structured body → `type=WALLET`, `source=INGEST`\n- Rate limiter → 429 after 200 req/min\n\n**CSV Upload**\n- Single DSK CSV → rows with `source=UPLOAD`, `currency=BGN`\n- Multiple CSVs in one request → all merged\n- `ТРАНСФЕР СОБСТВЕНИ СМЕТКИ` rows counted in `skipped`, not imported\n- Card regex match from `Основание` column\n- Auto-tags applied (ЗАПЛАТА→Salary, LIDL→Groceries)\n- cp1251 file imports correctly\n\n**UI**\n- Source badge visible in payment table (SMS indigo, CSV emerald)\n- Source dropdown in FilterBar filters correctly\n- Amount shows correct currency per row\n- Upload Panel: drag-and-drop works, result summary shows counts\n- Logout redirects to Authentik sign_out\n- No login form shown (Authentik handles it at NPM level)\n- Tags, send, skip, delete all still work\n\n## Reference Files\n\n- `/volume2/docker/finance/payments-logger/backend/src/routes/payments.js`\n- `/volume2/docker/finance/payments-logger/backend/src/parser.js`\n- `/volume2/docker/finance/payments-logger/backend/src/index.js`\n- `/volume2/docker/finance/payments-logger/backend/src/auth.js`\n- `/volume2/docker/finance/payments-logger/backend/prisma/schema.prisma`\n- `/volume2/docker/finance/payments-logger/frontend/src/App.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/PaymentTable.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/FilterBar.jsx`\n- `/volume2/docker/finance/dsk-uploader/dskuploader.py`\n- `/volume2/docker/finance/auth/docker-compose.yml`","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Claude’s Plan","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stayed in plan mode","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good question. Here's the full breakdown:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Backend Tech Stack — Options","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Backend Tech Stack — Options","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Why:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger is already Node.js/Express/Prisma. The new app is 80% payments-logger with CSV upload added on top. Keeping the same stack means:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"verbatim, zero rewrite","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy the entire","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"routes/payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with minimal edits","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Same Prisma schema workflow, same migrations, same Docker image","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parsing logic (the only Python-specific thing) ports cleanly to","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"csv-parse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— it's just regex + string manipulation, nothing pandas-specific","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Trade-off:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Have to port the Python CSV parsing to JS. It's ~150 lines and mostly string manipulation — straightforward.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option B: Python + FastAPI + SQLAlchemy","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option B: Python + FastAPI + SQLAlchemy","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rewrite everything in Python. dsk-uploader is Python, so CSV parsing is already done.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep the dsk-uploader CSV logic as-is (no porting). Python has better data science libraries if you later add analytics.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Lose the entire payments-logger backend (routes, parser, Prisma schema) — full rewrite. FastAPI + SQLAlchemy is a different mental model than Express + Prisma. Frontend stays React anyway, so the stack split doesn't simplify anything.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"More work overall, gains almost nothing.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep Node.js as the main API, add a separate Python FastAPI service just for CSV parsing. They share the DB.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zero porting — Python CSV code used as-is.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Two backend services to maintain, deploy, and keep in sync. Inter-service HTTP calls. Two Dockerfiles. For ~150 lines of CSV logic, this is massively over-engineered.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Not worth it.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Extend dsk-uploader into a full payments app.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pandas for CSV, no porting.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Jinja2 templates instead of React (or add React separately). Would need to reimplement the entire payments-logger (SMS parser, notification system, tag management, pagination/filtering). Flask's Jinja templating is far less capable than the existing React UI. The React frontend is the stronger UI foundation.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst of all options — rebuild the harder parts (UI, SMS parser, notification) for no gain.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Summary","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Summary","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parser port (the only cost of Option A) is a one-time ~150 line exercise. Everything else in the plan reuses payments-logger code directly. That's why Node.js is the clear winner here.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Want to adjust the stack, or shall I proceed with Option A?","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ok sounds good. Implement all you suggested","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Starting implementation. Let me first read all the reference files I'll need to copy from.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"parser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"FilterBar.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"FilterBar.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentTable.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentTable.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me read the remaining frontend files and the Dockerfile from payments-logger.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.css","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.css","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"tailwind.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tailwind.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"postcss.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"postcss.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"dskuploader.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dskuploader.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me also grab the remaining frontend components.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentCard.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentCard.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentList.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentList.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good, I have everything I need. Let me set up the todo list and start building.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create finance-hub directory structure","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"mkdir -p /volume2/docker/finance/finance-hub/backend/src/routes \\\n /volume2/docker/finance/finance-hub/backend/prisma/migrations/20260508_init \\\n /volume2/docker/finance/finance-hub/frontend/src/components && echo \"done\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"done","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"45 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n restart: unless-stopped\n environment:\n POSTGRES_USER: finance\n POSTGRES_PASSWORD: ${DB_PASSWORD}\n POSTGRES_DB: finance_hub\n volumes:\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U finance -d finance_hub\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n backend:\n build: ./backend\n restart: unless-stopped\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports:\n - \"${BACKEND_PORT:-3001}:3001\"\n depends_on:\n db:\n condition: service_healthy\n\n frontend:\n build: ./frontend\n restart: unless-stopped\n ports:\n - \"${FRONTEND_PORT:-5175}:5173\"\n depends_on:\n - backend\n\nvolumes:\n pgdata:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"15 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Database\nDB_PASSWORD=change_me_strong_password\n\n# Notifier service (for SMS payment notifications)\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# Timezone (used by SMS parser for Bulgarian bank timestamps)\nTZ=Europe/Sofia\n\n# Ports (optional — defaults shown)\nBACKEND_PORT=3001\nFRONTEND_PORT=5175","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".gitignore","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".gitignore","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env\nnode_modules/\ndist/\n*.log","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"54 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"generator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status {\n UNPROCESSED\n SENT\n SKIPPED\n}\n\nenum Source {\n INGEST\n UPLOAD\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration.sql","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration.sql","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"55 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"-- CreateEnum\nCREATE TYPE \"Status\" AS ENUM ('UNPROCESSED', 'SENT', 'SKIPPED');\nCREATE TYPE \"Source\" AS ENUM ('INGEST', 'UPLOAD');\n\n-- CreateTable\nCREATE TABLE \"payments\" (\n \"id\" SERIAL PRIMARY KEY,\n \"raw_message\" TEXT NOT NULL,\n \"date\" TIMESTAMP(3),\n \"type\" TEXT,\n \"card\" TEXT,\n \"recipient\" TEXT,\n \"amount\" DOUBLE PRECISION,\n \"currency\" TEXT DEFAULT 'EUR',\n \"balance\" DOUBLE PRECISION,\n \"source\" \"Source\" NOT NULL DEFAULT 'INGEST',\n \"status\" \"Status\" NOT NULL DEFAULT 'UNPROCESSED',\n \"notified_at\" TIMESTAMP(3),\n \"notify_phone\" TEXT,\n \"debit_bgn\" DOUBLE PRECISION,\n \"credit_bgn\" DOUBLE PRECISION,\n \"transaction_type\" TEXT,\n \"payer_account\" TEXT,\n \"created_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"updated_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\n-- CreateTable\nCREATE TABLE \"tags\" (\n \"id\" SERIAL PRIMARY KEY,\n \"name\" TEXT NOT NULL,\n \"color\" TEXT NOT NULL DEFAULT '#6b7280'\n);\n\n-- CreateUniqueIndex\nCREATE UNIQUE INDEX \"tags_name_key\" ON \"tags\"(\"name\");\n\n-- CreateTable (M2M join)\nCREATE TABLE \"_PaymentToTag\" (\n \"A\" INTEGER NOT NULL,\n \"B\" INTEGER NOT NULL,\n CONSTRAINT \"_PaymentToTag_AB_pkey\" PRIMARY KEY (\"A\", \"B\")\n);\n\nCREATE INDEX \"_PaymentToTag_B_index\" ON \"_PaymentToTag\"(\"B\");\n\n-- AddForeignKey\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_A_fkey\"\n FOREIGN KEY (\"A\") REFERENCES \"payments\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_B_fkey\"\n FOREIGN KEY (\"B\") REFERENCES \"tags\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration_lock.toml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration_lock.toml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Please do not edit this file manually\n# It should be added in your version-control system (e.g., Git)\nprovider = \"postgresql\"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"26 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-backend\",\n \"version\": \"1.0.0\",\n \"main\": \"src/index.js\",\n \"scripts\": {\n \"start\": \"node src/index.js\",\n \"dev\": \"nodemon src/index.js\",\n \"prisma:generate\": \"prisma generate\",\n \"prisma:migrate\": \"prisma migrate deploy\"\n },\n \"dependencies\": {\n \"@prisma/client\": \"^5.22.0\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.5.6\",\n \"express\": \"^4.21.1\",\n \"express-rate-limit\": \"^7.4.0\",\n \"iconv-lite\": \"^0.6.3\",\n \"morgan\": \"^1.10.0\",\n \"multer\": \"^1.4.5-lts.1\"\n },\n \"devDependencies\": {\n \"nodemon\": \"^3.1.7\",\n \"prisma\": \"^5.22.0\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FROM node:20-alpine\n\nRUN apk add --no-cache openssl\n\nWORKDIR /app\n\nCOPY package.json package-lock.json* ./\nRUN npm install\n\nCOPY prisma ./prisma\nRUN npx prisma generate\n\nCOPY src ./src\n\nEXPOSE 3001\n\nCMD [\"sh\", \"-c\", \"npx prisma migrate deploy && node src/index.js\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"27 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const PUBLIC_PATHS = new Set([\n '/api/health',\n '/api/payments/ingest',\n]);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n\n const username = req.headers['x-authentik-username'];\n if (!username) {\n return res.status(401).json({ error: 'Unauthorized — missing Authentik session' });\n }\n\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '')\n .split(',')\n .map(g => g.trim())\n .filter(Boolean),\n };\n\n next();\n}\n\nmodule.exports = { authentikMiddleware };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"parser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"104 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/**\n * Parses SMS payment messages from Bulgarian banks (DSK Bank, etc.)\n *\n * Supported formats:\n *\n * POS / INTERNET / ECOM / P2P payment:\n * DSK Bank. Na DD/MM/YYYY v HH:MM sa plateni AMOUNT CURRENCY s karta CARD na POS s adres: RECIPIENT. Nalichni: BALANCE CURRENCY.\n *\n * ATM withdrawal:\n * DSK Bank. Na DD/MM/YYYY v HH:MM sa iztegleni AMOUNT CURRENCY s karta CARD ot ATM s adres: RECIPIENT. Nalichni: BALANCE CURRENCY.\n *\n * ATM utility payment (amount may include fee as AMOUNT/FEE):\n * DSK Bank. Na DD/MM/YYYY v HH:MM sa plateni AMOUNT CURRENCY/FEE CURRENCY s karta CARD na ATM s adres:RECIPIENT. Nalichni: BALANCE CURRENCY.\n */\n\nconst LOCAL_TZ = process.env.TZ || 'Europe/Sofia';\n\n/**\n * Convert a local-timezone date/time to a UTC Date object.\n * Uses Intl to resolve the actual UTC offset (DST-aware).\n */\nfunction localToUtc(year, month, day, hour, minute) {\n const naive = new Date(Date.UTC(year, month - 1, day, hour, minute, 0));\n\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: LOCAL_TZ,\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n hour12: false,\n });\n\n const parts = {};\n formatter.formatToParts(naive).forEach(p => { parts[p.type] = p.value; });\n\n const localAtNaive = new Date(Date.UTC(\n parseInt(parts.year), parseInt(parts.month) - 1, parseInt(parts.day),\n parseInt(parts.hour) % 24, parseInt(parts.minute), parseInt(parts.second),\n ));\n\n const offsetMs = localAtNaive.getTime() - naive.getTime();\n return new Date(Date.UTC(year, month - 1, day, hour, minute, 0) - offsetMs);\n}\n\nfunction parsePaymentSms(message) {\n const result = {\n rawMessage: message,\n date: null,\n type: null,\n card: null,\n recipient: null,\n amount: null,\n balance: null,\n };\n\n // Date and time: \"Na DD/MM/YYYY v HH:MM\"\n const dateMatch = message.match(/Na (\\d{2})\\/(\\d{2})\\/(\\d{4}) v (\\d{2}):(\\d{2})/i);\n if (dateMatch) {\n const [, day, month, year, hour, minute] = dateMatch;\n result.date = localToUtc(\n parseInt(year), parseInt(month), parseInt(day),\n parseInt(hour), parseInt(minute),\n );\n }\n\n // Card mask: \"s karta 400915***4447\" or \"s karta 483890***7162\"\n const cardMatch = message.match(/s karta\\s+([\\d*]+)/i);\n if (cardMatch) {\n result.card = cardMatch[1];\n }\n\n // Transaction type: supports both prepositions\n // \"na POS\" / \"na ATM\" / \"na INTERNET\" etc. (payment)\n // \"ot ATM\" (withdrawal)\n const typeMatch = message.match(/(?:na|ot)\\s+(POS|ATM|INTERNET|ECOM|P2P)\\b/i);\n if (typeMatch) {\n result.type = typeMatch[1].toUpperCase();\n }\n\n // Recipient address: \"s adres: MERCHANT\" or \"s adres:MERCHANT\" (no space variant)\n const recipientMatch = message.match(/s adres:\\s*([^.]+)\\./i);\n if (recipientMatch) {\n result.recipient = recipientMatch[1].trim();\n }\n\n // Amount: handles both verbs and the AMOUNT/FEE suffix format\n // \"sa plateni 7.78 EUR\"\n // \"sa iztegleni 400.00 EUR\"\n // \"sa plateni 0.50 EUR/0.50 EUR\" → captures 0.50 (the charged amount, ignoring fee)\n const amountMatch = message.match(/sa (?:plateni|iztegleni)\\s+([\\d.,]+)\\s+[A-Z]{3}/i);\n if (amountMatch) {\n result.amount = parseFloat(amountMatch[1].replace(',', '.'));\n }\n\n // Balance: \"Nalichni: 2583.07 EUR.\"\n const balanceMatch = message.match(/Nalichni:\\s*([\\d.,]+)\\s+[A-Z]{3}/i);\n if (balanceMatch) {\n result.balance = parseFloat(balanceMatch[1].replace(',', '.'));\n }\n\n return result;\n}\n\nmodule.exports = { parsePaymentSms };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"csvParser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"csvParser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"175 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/**\n * DSK Bank CSV parser — Node.js port of dskuploader.py\n *\n * DSK Bank exports use Windows-1251 (cp1251) encoding.\n * Each row maps to a Payment record with source=UPLOAD, currency=BGN.\n */\n\nconst { parse } = require('csv-parse');\nconst iconv = require('iconv-lite');\n\nconst SKIP_TYPE = 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ';\nconst CARD_REGEX = /^\\d{6}x{6}\\d{4}$/;\nconst POS_REGEX = /^\\s*ПЛАЩАНЕ\\s+НА\\s+ПОС\\s+\\d{2}\\.\\d{2}\\.\\d{4}\\s+\\d{2}:\\d{2}/;\n\nconst COL = {\n DATE: 'Дата',\n TYPE: 'Вид на трансакцията',\n REASON: 'Основание',\n DEBIT: 'Дебит BGN',\n CREDIT: 'Кредит BGN',\n PAYEE: 'Наредител/Получател',\n ACCT: 'Номер сметка на наредителя / получателя',\n};\n\nconst TAG_RULES = [\n ['reason', 'ЗАПЛАТА', 'Salary'],\n ['reason', 'ТЕГЛЕНЕ НА ATM', 'ATM'],\n ['reason', 'ПЛАЩАНЕ ПО ЗАЕМ', 'Home Credit'],\n ['reason', 'АВТ.ТАКСА ОБСЛУЖВАНЕ', 'Bills'],\n ['transactionType', 'КОМУНАЛНИ УСЛУГИ', 'Bills'],\n ['payee', 'VIVACOM', 'Subscriptions'],\n ['payee', 'Google', 'Subscriptions'],\n ['payee', 'SkyShowtime', 'Subscriptions'],\n ['payee', 'NETFLIX', 'Subscriptions'],\n ['payee', 'LUKOIL', 'Bills'],\n ['payee', 'CityGate', 'Bills'],\n ['payee', 'CBA', 'Groceries'],\n ['payee', 'FANTASTICO', 'Groceries'],\n ['payee', 'LIDL', 'Groceries'],\n];\n\nfunction parseNum(val) {\n if (val == null || val === '') return null;\n if (typeof val === 'number') return isNaN(val) ? null : val;\n const s = String(val).trim().replace(/\\xa0/g, '').replace(/ /g, '').replace(',', '.');\n const n = parseFloat(s);\n return isNaN(n) ? null : n;\n}\n\nfunction parseDate(val) {\n if (!val) return null;\n const s = String(val).trim();\n const m = s.match(/^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/);\n if (m) {\n return new Date(Date.UTC(parseInt(m[3]), parseInt(m[2]) - 1, parseInt(m[1])));\n }\n return null;\n}\n\nfunction processReasonAndCard(reason) {\n if (!reason || typeof reason !== 'string') return { reason: '', card: null };\n\n const parts = reason.trim().split(' ');\n let card = null;\n let cleanReason = reason.trim();\n\n if (parts[0] && CARD_REGEX.test(parts[0])) {\n card = parts[0];\n cleanReason = parts.slice(1).join(' ').trim();\n }\n\n if (POS_REGEX.test(cleanReason)) {\n const posParts = cleanReason.split('<br/>');\n try {\n const dateTime = posParts[0].split('ПОС ')[1];\n cleanReason = `POS PAYMENT ${dateTime}`;\n } catch (_) { /* keep original */ }\n }\n\n return { reason: cleanReason.replace(/\\s+/g, ' ').trim(), card };\n}\n\nfunction generateTags(fields) {\n const tags = new Set();\n for (const [field, keyword, tagName] of TAG_RULES) {\n if ((fields[field] || '').includes(keyword)) {\n tags.add(tagName);\n }\n }\n return Array.from(tags);\n}\n\nfunction processRow(row) {\n const transactionType = (row[COL.TYPE] || '').trim();\n if (transactionType === SKIP_TYPE) return null;\n\n const { reason, card } = processReasonAndCard(row[COL.REASON]);\n const payee = (row[COL.PAYEE] || '').trim();\n const payerAccount = (row[COL.ACCT] || '').trim();\n const debitBgn = parseNum(row[COL.DEBIT]);\n const creditBgn = parseNum(row[COL.CREDIT]);\n const date = parseDate(row[COL.DATE]);\n\n const autoTags = generateTags({ reason, transactionType, payee, debitBgn, creditBgn });\n\n const amount = debitBgn ?? creditBgn ?? null;\n\n const rawMessage = [\n row[COL.DATE] && `Date: ${row[COL.DATE]}`,\n transactionType && `Type: ${transactionType}`,\n payee && `Payee: ${payee}`,\n debitBgn != null && `Debit: ${debitBgn} BGN`,\n creditBgn != null && `Credit: ${creditBgn} BGN`,\n ].filter(Boolean).join(' | ');\n\n return {\n rawMessage,\n date,\n type: null,\n card,\n recipient: payee || null,\n amount,\n currency: 'BGN',\n balance: null,\n source: 'UPLOAD',\n debitBgn,\n creditBgn,\n transactionType: transactionType || null,\n payerAccount: payerAccount || null,\n autoTags,\n };\n}\n\n/**\n * Parse a Buffer containing a DSK Bank CSV (cp1251 or UTF-8).\n * Returns { rows, skipped, errors }.\n */\nasync function parseDskCsv(buffer) {\n // Try cp1251 first (DSK Bank export encoding), fall back to UTF-8\n let text = iconv.decode(buffer, 'cp1251');\n if (!text.includes(COL.DATE)) {\n text = buffer.toString('utf-8');\n }\n\n return new Promise((resolve, reject) => {\n const rows = [];\n const errors = [];\n let skipped = 0;\n\n const parser = parse(text, {\n columns: true,\n skip_empty_lines: true,\n trim: true,\n relax_column_count: true,\n });\n\n parser.on('readable', () => {\n let record;\n while ((record = parser.read()) !== null) {\n try {\n const row = processRow(record);\n if (row === null) { skipped++; } else { rows.push(row); }\n } catch (err) {\n errors.push(err.message);\n }\n }\n });\n\n parser.on('error', reject);\n parser.on('end', () => resolve({ rows, skipped, errors }));\n });\n}\n\nmodule.exports = { parseDskCsv };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"39 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const express = require('express');\nconst cors = require('cors');\nconst morgan = require('morgan');\nconst rateLimit = require('express-rate-limit');\nconst { authentikMiddleware } = require('./auth');\nconst paymentsRouter = require('./routes/payments');\nconst uploadRouter = require('./routes/upload');\n\nconst app = express();\nconst PORT = process.env.PORT || 3001;\n\napp.use(cors());\napp.use(express.json({ limit: '16kb' }));\napp.use(morgan('combined'));\n\n// Rate-limit the public ingest endpoint before auth middleware\nconst ingestLimiter = rateLimit({\n windowMs: 60 * 1000,\n max: 200,\n standardHeaders: true,\n legacyHeaders: false,\n message: { error: 'Too many requests, slow down' },\n});\napp.use('/api/payments/ingest', ingestLimiter);\n\n// Authentik header auth (skips /api/health and /api/payments/ingest)\napp.use(authentikMiddleware);\n\napp.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\napp.use('/api/payments', paymentsRouter);\napp.use('/api/upload', uploadRouter);\n\napp.listen(PORT, '0.0.0.0', () => {\n console.log(`Finance Hub API running on port ${PORT}`);\n});","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"399 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const express = require('express');\nconst { PrismaClient } = require('@prisma/client');\nconst { parsePaymentSms } = require('../parser');\n\nconst router = express.Router();\nconst prisma = new PrismaClient();\n\nconst NOTIFIER_URL = process.env.NOTIFIER_URL;\nconst NOTIFIER_CHANNEL = process.env.NOTIFIER_CHANNEL || 'viber';\nconst DEFAULT_PHONE = process.env.NOTIFY_DEFAULT_PHONE;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction parseId(raw) {\n const id = parseInt(raw, 10);\n return Number.isFinite(id) ? id : null;\n}\n\nfunction formatNotifyMessage(payment) {\n const currency = payment.currency || 'EUR';\n const parts = [];\n if (payment.amount != null) parts.push(`Amount: ${payment.amount.toFixed(2)} ${currency}`);\n if (payment.recipient) parts.push(`At: ${payment.recipient}`);\n if (payment.balance != null) parts.push(`Balance: ${payment.balance.toFixed(2)} ${currency}`);\n if (payment.date) parts.push(`Date: ${new Date(payment.date).toLocaleString('en-GB')}`);\n return parts.join('\\n');\n}\n\nasync function sendNotification(payment) {\n if (!NOTIFIER_URL) {\n console.warn('[NOTIFY] NOTIFIER_URL not set — skipping notification');\n return;\n }\n\n const phone = payment.notifyPhone || DEFAULT_PHONE;\n if (!phone) {\n console.warn('[NOTIFY] No phone number for payment #' + payment.id + ' and NOTIFY_DEFAULT_PHONE not set');\n return;\n }\n\n const body = {\n phone,\n notification: NOTIFIER_CHANNEL,\n message: formatNotifyMessage(payment),\n };\n\n const res = await fetch(NOTIFIER_URL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Notifier responded ${res.status}: ${text}`);\n }\n}\n\n// ── Ingest a payment (public — no auth) ──────────────────────────────────────\n//\n// Two modes:\n//\n// SMS mode (default):\n// { \"message\": \"<raw SMS text>\", \"notifyPhone\": \"...\" }\n//\n// Structured mode (Apple Wallet / manual):\n// { \"ingestMode\": \"apple_wallet\", \"amount\": 7.78, \"recipient\": \"Apple Store\",\n// \"type\": \"WALLET\", \"card\": \"••••4447\", \"date\": \"2026-02-22T10:30:00Z\" }\n//\nrouter.post('/ingest', async (req, res) => {\n try {\n const { message, notifyPhone, ingestMode } = req.body;\n\n let data;\n\n if (ingestMode === 'apple_wallet' || (!message && req.body.amount != null)) {\n // ── Structured / Apple Wallet mode ──────────────────────────────────────\n const { amount, recipient, type, card, date, balance } = req.body;\n if (amount == null || !recipient) {\n return res.status(400).json({ error: 'amount and recipient are required for structured ingest' });\n }\n\n const rawMessage = [\n `Source: ${ingestMode || 'structured'}`,\n `Amount: ${amount}`,\n recipient && `Recipient: ${recipient}`,\n type && `Type: ${type}`,\n card && `Card: ${card}`,\n ].filter(Boolean).join(' | ');\n\n data = {\n rawMessage,\n date: date ? new Date(date) : new Date(),\n type: type || 'WALLET',\n card: card || null,\n recipient,\n amount: parseFloat(amount),\n currency: 'EUR',\n balance: balance != null ? parseFloat(balance) : null,\n source: 'INGEST',\n notifyPhone: notifyPhone || null,\n };\n\n } else {\n // ── SMS mode ─────────────────────────────────────────────────────────────\n if (!message) {\n return res.status(400).json({ error: 'message is required' });\n }\n if (typeof message !== 'string' || message.length > 2000) {\n return res.status(400).json({ error: 'message must be a string under 2000 characters' });\n }\n\n const parsed = parsePaymentSms(message);\n data = {\n rawMessage: parsed.rawMessage,\n date: parsed.date,\n type: parsed.type,\n card: parsed.card,\n recipient: parsed.recipient,\n amount: parsed.amount,\n currency: 'EUR',\n balance: parsed.balance,\n source: 'INGEST',\n notifyPhone: notifyPhone || null,\n };\n }\n\n const payment = await prisma.payment.create({\n data,\n include: { tags: true },\n });\n\n res.status(201).json(payment);\n } catch (err) {\n console.error('Ingest error:', err);\n res.status(500).json({ error: 'Failed to ingest payment' });\n }\n});\n\n// ── List payments with filtering ──────────────────────────────────────────────\nrouter.get('/', async (req, res) => {\n try {\n const {\n status,\n type,\n tag,\n source,\n recipient,\n dateFrom,\n dateTo,\n search,\n sortBy = 'createdAt',\n sortDir = 'desc',\n page = 1,\n } = req.query;\n\n const limit = Math.min(parseInt(req.query.limit, 10) || 50, 200);\n\n const where = {};\n\n if (status) where.status = status;\n if (type) where.type = type;\n if (source) where.source = source;\n if (recipient) where.recipient = { contains: recipient, mode: 'insensitive' };\n if (tag) where.tags = { some: { name: tag } };\n if (search) {\n where.OR = [\n { rawMessage: { contains: search, mode: 'insensitive' } },\n { recipient: { contains: search, mode: 'insensitive' } },\n ];\n }\n if (dateFrom || dateTo) {\n where.date = {};\n if (dateFrom) where.date.gte = new Date(dateFrom);\n if (dateTo) where.date.lte = new Date(dateTo);\n }\n\n const allowedSortFields = ['date', 'amount', 'balance', 'recipient', 'type', 'source', 'createdAt', 'status'];\n const orderField = allowedSortFields.includes(sortBy) ? sortBy : 'createdAt';\n const orderDir = sortDir === 'asc' ? 'asc' : 'desc';\n\n const skip = (parseInt(page, 10) - 1) * limit;\n\n const [payments, total] = await Promise.all([\n prisma.payment.findMany({\n where,\n include: { tags: true },\n orderBy: { [orderField]: orderDir },\n skip,\n take: limit,\n }),\n prisma.payment.count({ where }),\n ]);\n\n res.json({ payments, total, page: parseInt(page, 10), limit });\n } catch (err) {\n console.error('List error:', err);\n res.status(500).json({ error: 'Failed to list payments' });\n }\n});\n\n// ── Get filter options ────────────────────────────────────────────────────────\nrouter.get('/meta/filters', async (_req, res) => {\n try {\n const [types, recipients, tags, sources] = await Promise.all([\n prisma.payment.findMany({ distinct: ['type'], select: { type: true }, where: { type: { not: null } } }),\n prisma.payment.findMany({ distinct: ['recipient'], select: { recipient: true }, where: { recipient: { not: null } } }),\n prisma.tag.findMany({ orderBy: { name: 'asc' } }),\n prisma.payment.findMany({ distinct: ['source'], select: { source: true } }),\n ]);\n\n res.json({\n types: types.map(t => t.type),\n recipients: recipients.map(r => r.recipient),\n tags,\n sources: sources.map(s => s.source),\n });\n } catch (err) {\n res.status(500).json({ error: 'Failed to get filters' });\n }\n});\n\n// ── Get all tags ──────────────────────────────────────────────────────────────\nrouter.get('/meta/tags', async (_req, res) => {\n try {\n const tags = await prisma.tag.findMany({ orderBy: { name: 'asc' } });\n res.json(tags);\n } catch (err) {\n res.status(500).json({ error: 'Failed to list tags' });\n }\n});\n\n// ── Get single payment ────────────────────────────────────────────────────────\nrouter.get('/:id', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const payment = await prisma.payment.findUnique({\n where: { id },\n include: { tags: true },\n });\n if (!payment) return res.status(404).json({ error: 'Not found' });\n res.json(payment);\n } catch (err) {\n console.error('Get error:', err);\n res.status(500).json({ error: 'Failed to get payment' });\n }\n});\n\n// ── Update payment metadata (status) ─────────────────────────────────────────\nrouter.patch('/:id', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const { status } = req.body;\n const data = {};\n\n if (status) {\n const validStatuses = ['UNPROCESSED', 'SENT', 'SKIPPED'];\n if (!validStatuses.includes(status)) {\n return res.status(400).json({ error: `Invalid status. Must be one of: ${validStatuses.join(', ')}` });\n }\n data.status = status;\n }\n\n if (Object.keys(data).length === 0) {\n return res.status(400).json({ error: 'No valid fields to update' });\n }\n\n const updated = await prisma.payment.update({\n where: { id },\n data,\n include: { tags: true },\n });\n res.json(updated);\n } catch (err) {\n if (err.code === 'P2025') return res.status(404).json({ error: 'Not found' });\n console.error('Update error:', err);\n res.status(500).json({ error: 'Failed to update payment' });\n }\n});\n\n// ── Delete payment ───────────────────────────────────────────────────────────\nrouter.delete('/:id', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n await prisma.payment.delete({ where: { id } });\n res.json({ success: true });\n } catch (err) {\n if (err.code === 'P2025') return res.status(404).json({ error: 'Not found' });\n console.error('Delete error:', err);\n res.status(500).json({ error: 'Failed to delete payment' });\n }\n});\n\n// ── Send notification (mark as SENT + call notifier service) ─────────────────\nrouter.post('/:id/send', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const payment = await prisma.payment.findUnique({ where: { id } });\n if (!payment) return res.status(404).json({ error: 'Not found' });\n if (payment.status !== 'UNPROCESSED') {\n return res.status(409).json({ error: `Payment is already ${payment.status.toLowerCase()}` });\n }\n\n await sendNotification(payment);\n\n const updated = await prisma.payment.update({\n where: { id },\n data: { status: 'SENT', notifiedAt: new Date() },\n include: { tags: true },\n });\n\n res.json(updated);\n } catch (err) {\n console.error('Send error:', err);\n res.status(500).json({ error: 'Failed to send notification' });\n }\n});\n\n// ── Skip notification (mark as SKIPPED) ──────────────────────────────────────\nrouter.post('/:id/skip', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const payment = await prisma.payment.findUnique({ where: { id } });\n if (!payment) return res.status(404).json({ error: 'Not found' });\n if (payment.status !== 'UNPROCESSED') {\n return res.status(409).json({ error: `Payment is already ${payment.status.toLowerCase()}` });\n }\n\n const updated = await prisma.payment.update({\n where: { id },\n data: { status: 'SKIPPED' },\n include: { tags: true },\n });\n res.json(updated);\n } catch (err) {\n console.error('Skip error:', err);\n res.status(500).json({ error: 'Failed to skip payment' });\n }\n});\n\n// ── Add tag to payment ────────────────────────────────────────────────────────\nrouter.post('/:id/tags', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const { name, color } = req.body;\n if (!name) return res.status(400).json({ error: 'tag name is required' });\n\n const tag = await prisma.tag.upsert({\n where: { name },\n update: {},\n create: { name, color: color || '#6b7280' },\n });\n\n const updated = await prisma.payment.update({\n where: { id },\n data: { tags: { connect: { id: tag.id } } },\n include: { tags: true },\n });\n\n res.json(updated);\n } catch (err) {\n console.error('Tag error:', err);\n res.status(500).json({ error: 'Failed to add tag' });\n }\n});\n\n// ── Remove tag from payment ───────────────────────────────────────────────────\nrouter.delete('/:id/tags/:tagId', async (req, res) => {\n const id = parseId(req.params.id);\n const tagId = parseId(req.params.tagId);\n if (id === null || tagId === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const updated = await prisma.payment.update({\n where: { id },\n data: { tags: { disconnect: { id: tagId } } },\n include: { tags: true },\n });\n res.json(updated);\n } catch (err) {\n console.error('Remove tag error:', err);\n res.status(500).json({ error: 'Failed to remove tag' });\n }\n});\n\nmodule.exports = router;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"upload.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"upload.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"89 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const express = require('express');\nconst multer = require('multer');\nconst { PrismaClient } = require('@prisma/client');\nconst { parseDskCsv } = require('../csvParser');\n\nconst router = express.Router();\nconst prisma = new PrismaClient();\n\nconst upload = multer({\n storage: multer.memoryStorage(),\n limits: { fileSize: 10 * 1024 * 1024, files: 10 },\n fileFilter: (_req, file, cb) => {\n if (file.mimetype === 'text/csv' || file.originalname.toLowerCase().endsWith('.csv')) {\n cb(null, true);\n } else {\n cb(new Error('Only CSV files are accepted'));\n }\n },\n});\n\n// POST /api/upload/csv\n// Accepts 1-10 CSV files, parses them, stores to DB with source=UPLOAD.\n// Returns { imported, skipped, errors, payments[] }\nrouter.post('/csv', upload.array('files', 10), async (req, res) => {\n if (!req.files || req.files.length === 0) {\n return res.status(400).json({ error: 'No files uploaded' });\n }\n\n const allRows = [];\n const allErrors = [];\n let totalSkipped = 0;\n\n for (const file of req.files) {\n try {\n const { rows, skipped, errors } = await parseDskCsv(file.buffer);\n allRows.push(...rows);\n totalSkipped += skipped;\n allErrors.push(...errors.map(e => `${file.originalname}: ${e}`));\n } catch (err) {\n allErrors.push(`${file.originalname}: ${err.message}`);\n }\n }\n\n if (allRows.length === 0) {\n return res.status(422).json({\n error: 'No importable rows found',\n skipped: totalSkipped,\n errors: allErrors,\n });\n }\n\n const created = [];\n\n for (const row of allRows) {\n const { autoTags, ...paymentData } = row;\n try {\n const tagConnects = [];\n for (const tagName of autoTags) {\n const tag = await prisma.tag.upsert({\n where: { name: tagName },\n update: {},\n create: { name: tagName, color: '#6b7280' },\n });\n tagConnects.push({ id: tag.id });\n }\n\n const payment = await prisma.payment.create({\n data: {\n ...paymentData,\n ...(tagConnects.length ? { tags: { connect: tagConnects } } : {}),\n },\n include: { tags: true },\n });\n created.push(payment);\n } catch (err) {\n allErrors.push(`Row insert failed: ${err.message}`);\n }\n }\n\n res.status(201).json({\n imported: created.length,\n skipped: totalSkipped,\n errors: allErrors,\n payments: created,\n });\n});\n\nmodule.exports = router;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now writing all frontend config files:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"24 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-frontend\",\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n },\n \"dependencies\": {\n \"lucide-react\": \"^0.460.0\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\"\n },\n \"devDependencies\": {\n \"@types/react\": \"^18.3.12\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"autoprefixer\": \"^10.4.20\",\n \"postcss\": \"^8.4.49\",\n \"tailwindcss\": \"^3.4.15\",\n \"vite\": \"^6.0.1\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FROM node:20-alpine\n\nWORKDIR /app\n\nCOPY package.json package-lock.json* ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 5173\n\nCMD [\"npm\", \"run\", \"dev\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [react()],\n server: {\n host: '0.0.0.0',\n port: 5173,\n allowedHosts: ['finance-hub.lakylak.xyz'],\n proxy: {\n '/api': {\n target: 'http://backend:3001',\n changeOrigin: true,\n },\n },\n },\n});","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"tailwind.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tailwind.config.js","depth":25,"on_screen":false,"role_description":"text"}]...
|
94934952627993
|
-8843470486912991841
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about th...
|
13080
|
NULL
|
NULL
|
NULL
|
|
13082
|
581
|
3
|
2026-05-09T10:14:36.571336+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778321676571_m1.jpg...
|
Code
|
sms_export.json — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about th...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"reimport_sms.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":28,"on_screen":true,"value":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Design new payment-logge…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"JSON","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 1, Col 1","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"expanded","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"I'll explore all three reference projects in parallel to understand their structure before planning.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How data flows (ingest, storage, retrieval)\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How file uploads work - what files, what format, how parsed\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about the data model and what fields are stored.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth folder and authentik integration","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. What auth system is being used (Authentik)\n2. How authentication/authorization is implemented - OAuth2, OIDC, session tokens, JWT?\n3. Middleware - how is auth enforced on routes?\n4. Any frontend auth flow - login redirect, token handling, protected routes\n5. Environment variables related to auth\n6. Docker/deployment setup for the auth service itself\n7. Any example of how other apps integrate with this auth\n\nReport with: directory structure, auth flow description, middleware code, environment variable names, and integration patterns. This is a reference for building auth into a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"continue","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Launching parallel exploration of all three reference projects.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How data is ingested (look at /ingest route especially)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How file uploads work (what format, what processing happens)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth project structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. What authentication system is used (authentik integration details)\n3. How OAuth/OIDC flow works\n4. Any middleware or helper functions for protecting routes\n5. Session management approach\n6. How frontend handles auth state\n7. Any example of how other apps integrate with this auth system\n8. Docker setup and environment variables\n\nPlease read all files carefully - this auth system will be integrated into a new combined app. I need to understand exactly how to use it.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of all three. Let me design the plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design combined app architecture","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design a detailed implementation plan for a new combined web app that merges two existing applications. Here is full context:\n\n---\n\n## App 1: payments-logger (Node.js)\n- **Purpose**: Ingest Bulgarian bank SMS → parse → store in PostgreSQL → review/tag/notify in React UI\n- **Stack**: Node.js 20 + Express + Prisma 5 + PostgreSQL 16 + React 18 + Vite + Tailwind CSS\n- **Auth**: Custom JWT (bcryptjs + jose), tokens in localStorage\n- **Ingest**: POST /api/payments/ingest (public) — SMS text OR structured JSON (Apple Wallet)\n- **Schema** (PostgreSQL via Prisma):\n - `payments` table: id, raw_message, date, type (POS/ATM/INTERNET/ECOM/P2P/WALLET), card, recipient, amount, balance, status (UNPROCESSED/SENT/SKIPPED), notifyPhone, notifiedAt, created_at, updated_at\n - `tags` table: id, name, color — M2M with payments via `_PaymentToTag`\n - `users` table: id, username, hashed_password (this will be REMOVED)\n- **UI**: Single-page React app — PaymentTable (sortable, filterable, taggable), FilterBar, status actions (send/skip), notification system\n- **Parser** (backend/src/parser.js): Regex parser for Bulgarian DSK Bank SMS, extracts date/time (DD/MM/YYYY HH:MM), card mask, transaction type, recipient, amount, balance\n\n## App 2: dsk-uploader (Python/Flask)\n- **Purpose**: Upload DSK bank CSV exports → parse/normalize → upload to Notion database\n- **Stack**: Python 3.11 + Flask + Pandas + Custom Notion SDK + Bootstrap 5\n- **Auth**: None (open)\n- **CSV format** (DSK Bank Bulgarian format, columns):\n - `Дата` (date, DD.MM.YYYY)\n - `Вид на трансакцията` (transaction type, Bulgarian)\n - `Основание` (reason/description — contains card number regex: `^\\d{6}x{6}\\d{4}$`)\n - `Дебит BGN` (debit amount, may be empty)\n - `Кредит BGN` (credit amount, may be empty)\n - `Наредител/Получател` (orderer/recipient name)\n - `Номер сметка на наредителя / получателя` (account number)\n- **Processing**: merge multiple CSVs, normalize dates, extract card numbers from reason via regex, auto-generate tags (keyword heuristics: ЗАПЛАТА→Salary, NETFLIX→Subscriptions, etc.), filter internal transfers\n- **Output**: Notion database pages (this will be REPLACED with local PostgreSQL)\n\n## App 3: auth (Authentik)\n- **Mode**: Proxy mode via NPM (forward auth)\n- **How it works**: NPM intercepts all requests, calls Authentik outpost's auth endpoint. On success, NPM injects headers into proxied request:\n - `X-authentik-username` \n - `X-authentik-email`\n - `X-authentik-groups`\n- **No code integration needed** in the app itself — just trust these headers from NPM\n- **Logout**: Redirect user to `/outpost.goauthentik.io/sign_out`\n\n---\n\n## What the New Combined App Must Do\n\n1. **Single PostgreSQL database** for all transactions\n2. **SMS Ingest** (public endpoint) — same as payments-logger /ingest, source=INGEST\n3. **CSV Upload** (authenticated) — parse DSK CSV files, store transactions with source=UPLOAD into the same DB schema\n4. **Unified UI** — show all payments in one table regardless of source\n5. **Source indicator** in UI — badge showing \"INGEST\", \"UPLOAD\", or \"BOTH\" (if duplicate detection added)\n6. **Source filter** in FilterBar — filter by All/Ingest/Upload\n7. **Authentik auth** — remove custom JWT entirely; trust X-authentik-* headers from NPM\n8. **All existing payments-logger features**: tagging, send notification, skip, status tracking, filters, sorting, pagination\n9. **Remove Notion dependency entirely** — all data stays in local PostgreSQL\n\n---\n\n## Technical Constraints\n\n- Keep Node.js backend (not Python) — extend payments-logger's stack\n- CSV parsing: use `csv-parse` npm package (handles encoding, streaming)\n- File upload: use `multer` npm middleware\n- Auth middleware: read X-authentik-username header, 401 if missing (but /api/payments/ingest stays public)\n- Add `source` enum field (INGEST/UPLOAD) to payments schema\n- Add `currency` field (EUR for SMS ingest, BGN for CSV uploads) — or just store as-is\n- Remove `users` table from schema\n\n---\n\n## Please Design\n\n1. Complete folder structure for the new app (suggest name: \"finance-hub\" or similar — note this is a placeholder, user will confirm)\n2. Prisma schema with new fields (`source`, `currency`)\n3. All backend API routes\n4. CSV parser design in Node.js (port of the Python logic)\n5. Authentik auth middleware\n6. Frontend component structure (React) — what's reused from payments-logger, what's new\n7. Docker Compose setup\n8. Environment variables needed\n9. Step-by-step implementation order\n10. Verification checklist\n\nBe specific about file paths and code structure. This will be used to write actual implementation code.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good plan. Let me ask the one thing I need before writing the final plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskUserQuestion","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"User has answered your questions: \"What should the new combined app be called? This will be the folder name under /volume2/docker/finance/ and the app branding.\"=\"finance-hub\". You can now continue with the user's answers in mind.","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Writing the final plan now.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"326 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# finance-hub — Implementation Plan\n\n## Context\n\nTwo separate finance apps exist as references and will be retired:\n- **payments-logger** (Node.js/React): Ingests Bulgarian bank SMS notifications, stores payments in PostgreSQL, provides a review/tag/notify UI.\n- **dsk-uploader** (Python/Flask): Uploads DSK bank CSV exports, parses them, sends to Notion.\n\nThe new app **finance-hub** (`/volume2/docker/finance/finance-hub/`) replaces both with a single unified system: all transactions (SMS-ingested and CSV-uploaded) land in one PostgreSQL database and one React UI. Authentication is delegated entirely to Authentik (proxy mode via NPM — no custom JWT).\n\n---\n\n## Tech Stack\n\n| Layer | Choice | Rationale |\n|-------|--------|-----------|\n| Backend | Node.js 20 + Express + Prisma 5 | Extends payments-logger; no Python needed |\n| CSV parsing | `csv-parse` + `iconv-lite` | Handles Bulgarian cp1251 encoding, RFC4180 quoted fields |\n| File upload | `multer` (memory storage) | Bank CSVs are small (<500 KB), no disk cleanup needed |\n| Database | PostgreSQL 16 | Same as payments-logger |\n| Frontend | React 18 + Vite + Tailwind CSS + Lucide React | Same as payments-logger |\n| Auth | Authentik proxy via NPM headers | No custom JWT; removes users table entirely |\n| Container | Docker Compose | Same pattern as both reference apps |\n\n**Removed vs payments-logger:** `bcryptjs`, `jose`, `users` table, login form, JWT storage. \n**Removed vs dsk-uploader:** Python/Flask, Pandas, Notion SDK, all Notion references. \n**Added:** `csv-parse`, `iconv-lite`, `multer`, `source` + `currency` fields, `UploadPanel` component.\n\n---\n\n## Folder Structure\n\n```\n/volume2/docker/finance/finance-hub/\n├── docker-compose.yml\n├── .env\n├── .env.example\n├── .gitignore\n├── backend/\n│ ├── Dockerfile\n│ ├── package.json\n│ ├── prisma/\n│ │ ├── schema.prisma\n│ │ └── migrations/\n│ │ ├── migration_lock.toml\n│ │ └── 20260508_init/\n│ │ └── migration.sql\n│ └── src/\n│ ├── index.js ← entry point (Authentik middleware wired here)\n│ ├── auth.js ← Authentik header middleware (replaces JWT auth)\n│ ├── parser.js ← SMS parser (copy verbatim from payments-logger)\n│ ├── csvParser.js ← NEW: DSK CSV parser (port of Python dskuploader.py)\n│ └── routes/\n│ ├── payments.js ← existing routes + source/currency additions\n│ └── upload.js ← NEW: POST /api/upload/csv\n└── frontend/\n ├── Dockerfile\n ├── package.json\n ├── vite.config.js\n ├── tailwind.config.js\n ├── postcss.config.js\n ├── index.html\n └── src/\n ├── main.jsx ← remove AuthProvider wrapper\n ├── index.css\n ├── App.jsx ← remove auth state, add Upload tab toggle\n └── components/\n ├── FilterBar.jsx ← add source filter select\n ├── PaymentTable.jsx ← add Source badge column + currency display\n ├── PaymentCard.jsx ← minor source badge addition\n ├── PaymentList.jsx ← unchanged\n └── UploadPanel.jsx ← NEW: drag-and-drop CSV upload UI\n```\n\n---\n\n## Database Schema (Prisma)\n\nFile: `backend/prisma/schema.prisma`\n\n```prisma\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status { UNPROCESSED SENT SKIPPED }\nenum Source { INGEST UPLOAD }\n```\n\n**Key decisions:**\n- No `User` model — Authentik owns identity.\n- `currency`: `EUR` for SMS ingest, `BGN` for CSV uploads.\n- `debitBgn`, `creditBgn`, `transactionType`, `payerAccount`: nullable CSV-only columns; INGEST rows store nulls. Avoids a union query for the unified list view.\n- `balance` is always null for CSV rows (DSK export does not include running balance).\n- Fresh consolidated migration — no data migration from reference apps required.\n\n---\n\n## API Routes\n\n| Method | Path | Auth | Description |\n|--------|------|------|-------------|\n| GET | /api/health | public | Health check |\n| POST | /api/payments/ingest | public | SMS or structured ingest (source=INGEST) |\n| GET | /api/payments | required | List with filters/sort/pagination (+ source filter) |\n| GET | /api/payments/meta/tags | required | All tags |\n| GET | /api/payments/meta/filters | required | Filter options incl. `sources` array |\n| GET | /api/payments/:id | required | Single payment |\n| PATCH | /api/payments/:id | required | Update status |\n| DELETE | /api/payments/:id | required | Delete |\n| POST | /api/payments/:id/send | required | Send notification |\n| POST | /api/payments/:id/skip | required | Skip |\n| POST | /api/payments/:id/tags | required | Add/upsert tag |\n| DELETE | /api/payments/:id/tags/:tagId | required | Remove tag |\n| POST | /api/upload/csv | required | DSK CSV file upload (source=UPLOAD) |\n\n---\n\n## Key Implementation Details\n\n### auth.js (replaces entire old auth module)\n```js\nconst PUBLIC_PATHS = new Set(['/api/health', '/api/payments/ingest']);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n const username = req.headers['x-authentik-username'];\n if (!username) return res.status(401).json({ error: 'Unauthorized' });\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '').split(',').map(g => g.trim()).filter(Boolean),\n };\n next();\n}\nmodule.exports = { authentikMiddleware };\n```\n\n### csvParser.js (port of dskuploader.py)\n- `iconv-lite` decodes buffer as cp1251 (DSK Bank export encoding), falls back to UTF-8\n- `csv-parse` parses the decoded text with `columns: true`\n- Columns: `Дата`, `Вид на трансакцията`, `Основание`, `Дебит BGN`, `Кредит BGN`, `Наредител/Получател`, `Номер сметка на наредителя / получателя`\n- Card extraction: regex `/^\\d{6}x{6}\\d{4}$/` on first token of `Основание`\n- Skips rows where `Вид на трансакцията === 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ'`\n- Auto-tags via keyword rules (ЗАПЛАТА→Salary, LIDL→Groceries, NETFLIX→Subscriptions, etc.) — same logic as Python `generate_tags()`\n- Returns `{ rows: PaymentData[], skipped: number, errors: string[] }`\n\n### payments.js changes from payments-logger\n1. Add `source: 'INGEST'` and `currency` to the `/ingest` create call\n2. Add `source` to the `GET /` where clause filter\n3. Add `sources` to `meta/filters` response\n4. Currency-aware amount formatting in notification message\n5. Remove all JWT/auth references (no `/auth/register`, `/auth/login`)\n\n### upload.js (new)\n- `multer` memory storage, max 10 files × 10 MB\n- Calls `parseDskCsv(buffer)` per file\n- Upserts tags via `prisma.tag.upsert` then connects\n- Returns `{ imported, skipped, errors, payments[] }`\n\n### Frontend changes\n- **Delete**: `auth.js`, `AuthProvider.jsx`\n- **main.jsx**: Remove `<AuthProvider>` wrapper\n- **App.jsx**: Replace `authFetch` with plain `fetch` (Authentik session cookie travels automatically); logout → `window.location.href = '/outpost.goauthentik.io/sign_out'`; add \"Payments\" / \"Upload CSV\" tab toggle\n- **FilterBar.jsx**: Add source `<select>` (All / SMS Ingest / CSV Upload); widen grid to 5 cols\n- **PaymentTable.jsx**: Add `Source` column with `SMS` (indigo) / `CSV` (emerald) badge; show `${amount} ${currency}` in amount cell\n- **UploadPanel.jsx** (new): Drag-and-drop zone + file list + import button + result summary with error accordion; calls `POST /api/upload/csv` with `FormData`\n\n---\n\n## Docker Compose\n\n```yaml\nservices:\n db:\n image: postgres:16-alpine\n environment: { POSTGRES_USER: finance, POSTGRES_PASSWORD: ${DB_PASSWORD}, POSTGRES_DB: finance_hub }\n volumes: [pgdata:/var/lib/postgresql/data]\n healthcheck: { test: pg_isready -U finance -d finance_hub, interval: 5s }\n\n backend:\n build: ./backend\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports: [\"${BACKEND_PORT:-3001}:3001\"]\n depends_on: { db: { condition: service_healthy } }\n\n frontend:\n build: ./frontend\n ports: [\"${FRONTEND_PORT:-5175}:5173\"]\n depends_on: [backend]\n\nvolumes: { pgdata: }\n```\n\n**NPM setup:** Frontend port proxied through Authentik forward auth. Backend port exposed separately (unprotected) so the public `/api/payments/ingest` remains reachable by iOS Shortcuts / SMS gateways without login.\n\n---\n\n## Environment Variables (.env)\n\n```bash\nDB_PASSWORD=change_me\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\nTZ=Europe/Sofia\nBACKEND_PORT=3001\nFRONTEND_PORT=5175\n```\n\nRemoved vs payments-logger: `JWT_SECRET`, `JWT_EXPIRE_MINUTES`.\n\n---\n\n## Implementation Order\n\n1. Create folder structure and write `docker-compose.yml`, `.env.example`, `.gitignore`\n2. Write `backend/prisma/schema.prisma` and migration SQL\n3. Write `backend/package.json` (add `csv-parse`, `iconv-lite`, `multer`; remove `bcryptjs`, `jose`)\n4. Write `backend/Dockerfile`\n5. Write `backend/src/auth.js` (Authentik middleware)\n6. Copy `backend/src/parser.js` verbatim from payments-logger\n7. Write `backend/src/csvParser.js` (Python port)\n8. Write `backend/src/routes/upload.js`\n9. Write `backend/src/routes/payments.js` (from payments-logger + 5 changes listed above)\n10. Write `backend/src/index.js`\n11. Copy frontend base from payments-logger; delete `auth.js` + `AuthProvider.jsx`\n12. Update `main.jsx`, `App.jsx`, `FilterBar.jsx`, `PaymentTable.jsx`\n13. Write `frontend/src/components/UploadPanel.jsx`\n14. Update `frontend/vite.config.js`\n15. `docker compose build && docker compose up -d`\n16. Run verification checklist\n\n---\n\n## Verification\n\n**Schema**\n- `payments` table has `source`, `currency`, `debit_bgn`, `credit_bgn`, `transaction_type`, `payer_account`\n- No `users` table; `Source` enum exists\n\n**Auth**\n- `GET /api/payments` → 401 without `x-authentik-username` header\n- `POST /api/payments/ingest` → 201 without any header\n- `curl -H \"x-authentik-username: test\" localhost:3001/api/payments` → 200\n\n**SMS Ingest**\n- DSK POS SMS → `source=INGEST`, `currency=EUR`, correct amount/card/recipient\n- Apple Wallet structured body → `type=WALLET`, `source=INGEST`\n- Rate limiter → 429 after 200 req/min\n\n**CSV Upload**\n- Single DSK CSV → rows with `source=UPLOAD`, `currency=BGN`\n- Multiple CSVs in one request → all merged\n- `ТРАНСФЕР СОБСТВЕНИ СМЕТКИ` rows counted in `skipped`, not imported\n- Card regex match from `Основание` column\n- Auto-tags applied (ЗАПЛАТА→Salary, LIDL→Groceries)\n- cp1251 file imports correctly\n\n**UI**\n- Source badge visible in payment table (SMS indigo, CSV emerald)\n- Source dropdown in FilterBar filters correctly\n- Amount shows correct currency per row\n- Upload Panel: drag-and-drop works, result summary shows counts\n- Logout redirects to Authentik sign_out\n- No login form shown (Authentik handles it at NPM level)\n- Tags, send, skip, delete all still work\n\n## Reference Files\n\n- `/volume2/docker/finance/payments-logger/backend/src/routes/payments.js`\n- `/volume2/docker/finance/payments-logger/backend/src/parser.js`\n- `/volume2/docker/finance/payments-logger/backend/src/index.js`\n- `/volume2/docker/finance/payments-logger/backend/src/auth.js`\n- `/volume2/docker/finance/payments-logger/backend/prisma/schema.prisma`\n- `/volume2/docker/finance/payments-logger/frontend/src/App.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/PaymentTable.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/FilterBar.jsx`\n- `/volume2/docker/finance/dsk-uploader/dskuploader.py`\n- `/volume2/docker/finance/auth/docker-compose.yml`","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Claude’s Plan","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stayed in plan mode","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good question. Here's the full breakdown:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Backend Tech Stack — Options","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Backend Tech Stack — Options","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Why:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger is already Node.js/Express/Prisma. The new app is 80% payments-logger with CSV upload added on top. Keeping the same stack means:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"verbatim, zero rewrite","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy the entire","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"routes/payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with minimal edits","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Same Prisma schema workflow, same migrations, same Docker image","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parsing logic (the only Python-specific thing) ports cleanly to","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"csv-parse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— it's just regex + string manipulation, nothing pandas-specific","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Trade-off:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Have to port the Python CSV parsing to JS. It's ~150 lines and mostly string manipulation — straightforward.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option B: Python + FastAPI + SQLAlchemy","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option B: Python + FastAPI + SQLAlchemy","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rewrite everything in Python. dsk-uploader is Python, so CSV parsing is already done.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep the dsk-uploader CSV logic as-is (no porting). Python has better data science libraries if you later add analytics.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Lose the entire payments-logger backend (routes, parser, Prisma schema) — full rewrite. FastAPI + SQLAlchemy is a different mental model than Express + Prisma. Frontend stays React anyway, so the stack split doesn't simplify anything.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"More work overall, gains almost nothing.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep Node.js as the main API, add a separate Python FastAPI service just for CSV parsing. They share the DB.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zero porting — Python CSV code used as-is.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Two backend services to maintain, deploy, and keep in sync. Inter-service HTTP calls. Two Dockerfiles. For ~150 lines of CSV logic, this is massively over-engineered.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Not worth it.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Extend dsk-uploader into a full payments app.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pandas for CSV, no porting.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Jinja2 templates instead of React (or add React separately). Would need to reimplement the entire payments-logger (SMS parser, notification system, tag management, pagination/filtering). Flask's Jinja templating is far less capable than the existing React UI. The React frontend is the stronger UI foundation.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst of all options — rebuild the harder parts (UI, SMS parser, notification) for no gain.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Summary","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Summary","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parser port (the only cost of Option A) is a one-time ~150 line exercise. Everything else in the plan reuses payments-logger code directly. That's why Node.js is the clear winner here.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Want to adjust the stack, or shall I proceed with Option A?","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ok sounds good. Implement all you suggested","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Starting implementation. Let me first read all the reference files I'll need to copy from.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"parser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"FilterBar.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"FilterBar.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentTable.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentTable.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me read the remaining frontend files and the Dockerfile from payments-logger.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.css","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.css","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"tailwind.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tailwind.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"postcss.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"postcss.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"dskuploader.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dskuploader.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me also grab the remaining frontend components.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentCard.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentCard.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentList.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentList.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good, I have everything I need. Let me set up the todo list and start building.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create finance-hub directory structure","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"mkdir -p /volume2/docker/finance/finance-hub/backend/src/routes \\\n /volume2/docker/finance/finance-hub/backend/prisma/migrations/20260508_init \\\n /volume2/docker/finance/finance-hub/frontend/src/components && echo \"done\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"done","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"45 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n restart: unless-stopped\n environment:\n POSTGRES_USER: finance\n POSTGRES_PASSWORD: ${DB_PASSWORD}\n POSTGRES_DB: finance_hub\n volumes:\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U finance -d finance_hub\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n backend:\n build: ./backend\n restart: unless-stopped\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports:\n - \"${BACKEND_PORT:-3001}:3001\"\n depends_on:\n db:\n condition: service_healthy\n\n frontend:\n build: ./frontend\n restart: unless-stopped\n ports:\n - \"${FRONTEND_PORT:-5175}:5173\"\n depends_on:\n - backend\n\nvolumes:\n pgdata:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"15 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Database\nDB_PASSWORD=change_me_strong_password\n\n# Notifier service (for SMS payment notifications)\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# Timezone (used by SMS parser for Bulgarian bank timestamps)\nTZ=Europe/Sofia\n\n# Ports (optional — defaults shown)\nBACKEND_PORT=3001\nFRONTEND_PORT=5175","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".gitignore","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".gitignore","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env\nnode_modules/\ndist/\n*.log","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"54 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"generator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status {\n UNPROCESSED\n SENT\n SKIPPED\n}\n\nenum Source {\n INGEST\n UPLOAD\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration.sql","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration.sql","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"55 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"-- CreateEnum\nCREATE TYPE \"Status\" AS ENUM ('UNPROCESSED', 'SENT', 'SKIPPED');\nCREATE TYPE \"Source\" AS ENUM ('INGEST', 'UPLOAD');\n\n-- CreateTable\nCREATE TABLE \"payments\" (\n \"id\" SERIAL PRIMARY KEY,\n \"raw_message\" TEXT NOT NULL,\n \"date\" TIMESTAMP(3),\n \"type\" TEXT,\n \"card\" TEXT,\n \"recipient\" TEXT,\n \"amount\" DOUBLE PRECISION,\n \"currency\" TEXT DEFAULT 'EUR',\n \"balance\" DOUBLE PRECISION,\n \"source\" \"Source\" NOT NULL DEFAULT 'INGEST',\n \"status\" \"Status\" NOT NULL DEFAULT 'UNPROCESSED',\n \"notified_at\" TIMESTAMP(3),\n \"notify_phone\" TEXT,\n \"debit_bgn\" DOUBLE PRECISION,\n \"credit_bgn\" DOUBLE PRECISION,\n \"transaction_type\" TEXT,\n \"payer_account\" TEXT,\n \"created_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"updated_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\n-- CreateTable\nCREATE TABLE \"tags\" (\n \"id\" SERIAL PRIMARY KEY,\n \"name\" TEXT NOT NULL,\n \"color\" TEXT NOT NULL DEFAULT '#6b7280'\n);\n\n-- CreateUniqueIndex\nCREATE UNIQUE INDEX \"tags_name_key\" ON \"tags\"(\"name\");\n\n-- CreateTable (M2M join)\nCREATE TABLE \"_PaymentToTag\" (\n \"A\" INTEGER NOT NULL,\n \"B\" INTEGER NOT NULL,\n CONSTRAINT \"_PaymentToTag_AB_pkey\" PRIMARY KEY (\"A\", \"B\")\n);\n\nCREATE INDEX \"_PaymentToTag_B_index\" ON \"_PaymentToTag\"(\"B\");\n\n-- AddForeignKey\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_A_fkey\"\n FOREIGN KEY (\"A\") REFERENCES \"payments\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_B_fkey\"\n FOREIGN KEY (\"B\") REFERENCES \"tags\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration_lock.toml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration_lock.toml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Please do not edit this file manually\n# It should be added in your version-control system (e.g., Git)\nprovider = \"postgresql\"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"26 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-backend\",\n \"version\": \"1.0.0\",\n \"main\": \"src/index.js\",\n \"scripts\": {\n \"start\": \"node src/index.js\",\n \"dev\": \"nodemon src/index.js\",\n \"prisma:generate\": \"prisma generate\",\n \"prisma:migrate\": \"prisma migrate deploy\"\n },\n \"dependencies\": {\n \"@prisma/client\": \"^5.22.0\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.5.6\",\n \"express\": \"^4.21.1\",\n \"express-rate-limit\": \"^7.4.0\",\n \"iconv-lite\": \"^0.6.3\",\n \"morgan\": \"^1.10.0\",\n \"multer\": \"^1.4.5-lts.1\"\n },\n \"devDependencies\": {\n \"nodemon\": \"^3.1.7\",\n \"prisma\": \"^5.22.0\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FROM node:20-alpine\n\nRUN apk add --no-cache openssl\n\nWORKDIR /app\n\nCOPY package.json package-lock.json* ./\nRUN npm install\n\nCOPY prisma ./prisma\nRUN npx prisma generate\n\nCOPY src ./src\n\nEXPOSE 3001\n\nCMD [\"sh\", \"-c\", \"npx prisma migrate deploy && node src/index.js\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"}]...
|
94934952627993
|
-8843470486912991841
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about th...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13085
|
581
|
5
|
2026-05-09T10:14:51.415423+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778321691415_m1.jpg...
|
Code
|
sms_export.json — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about th...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"reimport_sms.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":28,"on_screen":true,"value":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Design new payment-logge…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"JSON","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 1, Col 1","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"expanded","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"I'll explore all three reference projects in parallel to understand their structure before planning.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How data flows (ingest, storage, retrieval)\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure and functionality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Tech stack (frontend framework, backend framework, database)\n2. What the app does - its core purpose and features\n3. Database schema - all tables, relationships\n4. API routes - all endpoints, their purpose and request/response shapes\n5. How file uploads work - what files, what format, how parsed\n6. Any auth/middleware setup\n7. Docker/deployment setup\n8. Key files and their roles\n\nReport with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about the data model and what fields are stored.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth folder and authentik integration","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. What auth system is being used (Authentik)\n2. How authentication/authorization is implemented - OAuth2, OIDC, session tokens, JWT?\n3. Middleware - how is auth enforced on routes?\n4. Any frontend auth flow - login redirect, token handling, protected routes\n5. Environment variables related to auth\n6. Docker/deployment setup for the auth service itself\n7. Any example of how other apps integrate with this auth\n\nReport with: directory structure, auth flow description, middleware code, environment variable names, and integration patterns. This is a reference for building auth into a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"continue","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Launching parallel exploration of all three reference projects.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore payment-logger app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How data is ingested (look at /ingest route especially)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore dsk-uploader app structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. Tech stack (frontend framework, backend framework, database, etc.)\n3. What the app does - its core functionality\n4. How file uploads work (what format, what processing happens)\n5. Database schema (what tables/collections exist)\n6. API routes and their purposes\n7. Frontend pages and components\n8. Docker setup\n9. Any auth/session handling\n\nPlease read key files: package.json files, main entry points, route files, database schema files, docker-compose.yml, and any frontend components. Be thorough - I need a complete picture to plan a new combined app.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore auth project structure","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Explore the /volume2/docker/finance/auth directory thoroughly. I need to understand:\n1. Full directory structure (tree)\n2. What authentication system is used (authentik integration details)\n3. How OAuth/OIDC flow works\n4. Any middleware or helper functions for protecting routes\n5. Session management approach\n6. How frontend handles auth state\n7. Any example of how other apps integrate with this auth system\n8. Docker setup and environment variables\n\nPlease read all files carefully - this auth system will be integrated into a new combined app. I need to understand exactly how to use it.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a complete picture of all three. Let me design the plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Agent:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design combined app architecture","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Design a detailed implementation plan for a new combined web app that merges two existing applications. Here is full context:\n\n---\n\n## App 1: payments-logger (Node.js)\n- **Purpose**: Ingest Bulgarian bank SMS → parse → store in PostgreSQL → review/tag/notify in React UI\n- **Stack**: Node.js 20 + Express + Prisma 5 + PostgreSQL 16 + React 18 + Vite + Tailwind CSS\n- **Auth**: Custom JWT (bcryptjs + jose), tokens in localStorage\n- **Ingest**: POST /api/payments/ingest (public) — SMS text OR structured JSON (Apple Wallet)\n- **Schema** (PostgreSQL via Prisma):\n - `payments` table: id, raw_message, date, type (POS/ATM/INTERNET/ECOM/P2P/WALLET), card, recipient, amount, balance, status (UNPROCESSED/SENT/SKIPPED), notifyPhone, notifiedAt, created_at, updated_at\n - `tags` table: id, name, color — M2M with payments via `_PaymentToTag`\n - `users` table: id, username, hashed_password (this will be REMOVED)\n- **UI**: Single-page React app — PaymentTable (sortable, filterable, taggable), FilterBar, status actions (send/skip), notification system\n- **Parser** (backend/src/parser.js): Regex parser for Bulgarian DSK Bank SMS, extracts date/time (DD/MM/YYYY HH:MM), card mask, transaction type, recipient, amount, balance\n\n## App 2: dsk-uploader (Python/Flask)\n- **Purpose**: Upload DSK bank CSV exports → parse/normalize → upload to Notion database\n- **Stack**: Python 3.11 + Flask + Pandas + Custom Notion SDK + Bootstrap 5\n- **Auth**: None (open)\n- **CSV format** (DSK Bank Bulgarian format, columns):\n - `Дата` (date, DD.MM.YYYY)\n - `Вид на трансакцията` (transaction type, Bulgarian)\n - `Основание` (reason/description — contains card number regex: `^\\d{6}x{6}\\d{4}$`)\n - `Дебит BGN` (debit amount, may be empty)\n - `Кредит BGN` (credit amount, may be empty)\n - `Наредител/Получател` (orderer/recipient name)\n - `Номер сметка на наредителя / получателя` (account number)\n- **Processing**: merge multiple CSVs, normalize dates, extract card numbers from reason via regex, auto-generate tags (keyword heuristics: ЗАПЛАТА→Salary, NETFLIX→Subscriptions, etc.), filter internal transfers\n- **Output**: Notion database pages (this will be REPLACED with local PostgreSQL)\n\n## App 3: auth (Authentik)\n- **Mode**: Proxy mode via NPM (forward auth)\n- **How it works**: NPM intercepts all requests, calls Authentik outpost's auth endpoint. On success, NPM injects headers into proxied request:\n - `X-authentik-username` \n - `X-authentik-email`\n - `X-authentik-groups`\n- **No code integration needed** in the app itself — just trust these headers from NPM\n- **Logout**: Redirect user to `/outpost.goauthentik.io/sign_out`\n\n---\n\n## What the New Combined App Must Do\n\n1. **Single PostgreSQL database** for all transactions\n2. **SMS Ingest** (public endpoint) — same as payments-logger /ingest, source=INGEST\n3. **CSV Upload** (authenticated) — parse DSK CSV files, store transactions with source=UPLOAD into the same DB schema\n4. **Unified UI** — show all payments in one table regardless of source\n5. **Source indicator** in UI — badge showing \"INGEST\", \"UPLOAD\", or \"BOTH\" (if duplicate detection added)\n6. **Source filter** in FilterBar — filter by All/Ingest/Upload\n7. **Authentik auth** — remove custom JWT entirely; trust X-authentik-* headers from NPM\n8. **All existing payments-logger features**: tagging, send notification, skip, status tracking, filters, sorting, pagination\n9. **Remove Notion dependency entirely** — all data stays in local PostgreSQL\n\n---\n\n## Technical Constraints\n\n- Keep Node.js backend (not Python) — extend payments-logger's stack\n- CSV parsing: use `csv-parse` npm package (handles encoding, streaming)\n- File upload: use `multer` npm middleware\n- Auth middleware: read X-authentik-username header, 401 if missing (but /api/payments/ingest stays public)\n- Add `source` enum field (INGEST/UPLOAD) to payments schema\n- Add `currency` field (EUR for SMS ingest, BGN for CSV uploads) — or just store as-is\n- Remove `users` table from schema\n\n---\n\n## Please Design\n\n1. Complete folder structure for the new app (suggest name: \"finance-hub\" or similar — note this is a placeholder, user will confirm)\n2. Prisma schema with new fields (`source`, `currency`)\n3. All backend API routes\n4. CSV parser design in Node.js (port of the Python logic)\n5. Authentik auth middleware\n6. Frontend component structure (React) — what's reused from payments-logger, what's new\n7. Docker Compose setup\n8. Environment variables needed\n9. Step-by-step implementation order\n10. Verification checklist\n\nBe specific about file paths and code structure. This will be used to write actual implementation code.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good plan. Let me ask the one thing I need before writing the final plan.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"AskUserQuestion","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"User has answered your questions: \"What should the new combined app be called? This will be the folder name under /volume2/docker/finance/ and the app branding.\"=\"finance-hub\". You can now continue with the user's answers in mind.","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Writing the final plan now.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"326 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# finance-hub — Implementation Plan\n\n## Context\n\nTwo separate finance apps exist as references and will be retired:\n- **payments-logger** (Node.js/React): Ingests Bulgarian bank SMS notifications, stores payments in PostgreSQL, provides a review/tag/notify UI.\n- **dsk-uploader** (Python/Flask): Uploads DSK bank CSV exports, parses them, sends to Notion.\n\nThe new app **finance-hub** (`/volume2/docker/finance/finance-hub/`) replaces both with a single unified system: all transactions (SMS-ingested and CSV-uploaded) land in one PostgreSQL database and one React UI. Authentication is delegated entirely to Authentik (proxy mode via NPM — no custom JWT).\n\n---\n\n## Tech Stack\n\n| Layer | Choice | Rationale |\n|-------|--------|-----------|\n| Backend | Node.js 20 + Express + Prisma 5 | Extends payments-logger; no Python needed |\n| CSV parsing | `csv-parse` + `iconv-lite` | Handles Bulgarian cp1251 encoding, RFC4180 quoted fields |\n| File upload | `multer` (memory storage) | Bank CSVs are small (<500 KB), no disk cleanup needed |\n| Database | PostgreSQL 16 | Same as payments-logger |\n| Frontend | React 18 + Vite + Tailwind CSS + Lucide React | Same as payments-logger |\n| Auth | Authentik proxy via NPM headers | No custom JWT; removes users table entirely |\n| Container | Docker Compose | Same pattern as both reference apps |\n\n**Removed vs payments-logger:** `bcryptjs`, `jose`, `users` table, login form, JWT storage. \n**Removed vs dsk-uploader:** Python/Flask, Pandas, Notion SDK, all Notion references. \n**Added:** `csv-parse`, `iconv-lite`, `multer`, `source` + `currency` fields, `UploadPanel` component.\n\n---\n\n## Folder Structure\n\n```\n/volume2/docker/finance/finance-hub/\n├── docker-compose.yml\n├── .env\n├── .env.example\n├── .gitignore\n├── backend/\n│ ├── Dockerfile\n│ ├── package.json\n│ ├── prisma/\n│ │ ├── schema.prisma\n│ │ └── migrations/\n│ │ ├── migration_lock.toml\n│ │ └── 20260508_init/\n│ │ └── migration.sql\n│ └── src/\n│ ├── index.js ← entry point (Authentik middleware wired here)\n│ ├── auth.js ← Authentik header middleware (replaces JWT auth)\n│ ├── parser.js ← SMS parser (copy verbatim from payments-logger)\n│ ├── csvParser.js ← NEW: DSK CSV parser (port of Python dskuploader.py)\n│ └── routes/\n│ ├── payments.js ← existing routes + source/currency additions\n│ └── upload.js ← NEW: POST /api/upload/csv\n└── frontend/\n ├── Dockerfile\n ├── package.json\n ├── vite.config.js\n ├── tailwind.config.js\n ├── postcss.config.js\n ├── index.html\n └── src/\n ├── main.jsx ← remove AuthProvider wrapper\n ├── index.css\n ├── App.jsx ← remove auth state, add Upload tab toggle\n └── components/\n ├── FilterBar.jsx ← add source filter select\n ├── PaymentTable.jsx ← add Source badge column + currency display\n ├── PaymentCard.jsx ← minor source badge addition\n ├── PaymentList.jsx ← unchanged\n └── UploadPanel.jsx ← NEW: drag-and-drop CSV upload UI\n```\n\n---\n\n## Database Schema (Prisma)\n\nFile: `backend/prisma/schema.prisma`\n\n```prisma\ngenerator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status { UNPROCESSED SENT SKIPPED }\nenum Source { INGEST UPLOAD }\n```\n\n**Key decisions:**\n- No `User` model — Authentik owns identity.\n- `currency`: `EUR` for SMS ingest, `BGN` for CSV uploads.\n- `debitBgn`, `creditBgn`, `transactionType`, `payerAccount`: nullable CSV-only columns; INGEST rows store nulls. Avoids a union query for the unified list view.\n- `balance` is always null for CSV rows (DSK export does not include running balance).\n- Fresh consolidated migration — no data migration from reference apps required.\n\n---\n\n## API Routes\n\n| Method | Path | Auth | Description |\n|--------|------|------|-------------|\n| GET | /api/health | public | Health check |\n| POST | /api/payments/ingest | public | SMS or structured ingest (source=INGEST) |\n| GET | /api/payments | required | List with filters/sort/pagination (+ source filter) |\n| GET | /api/payments/meta/tags | required | All tags |\n| GET | /api/payments/meta/filters | required | Filter options incl. `sources` array |\n| GET | /api/payments/:id | required | Single payment |\n| PATCH | /api/payments/:id | required | Update status |\n| DELETE | /api/payments/:id | required | Delete |\n| POST | /api/payments/:id/send | required | Send notification |\n| POST | /api/payments/:id/skip | required | Skip |\n| POST | /api/payments/:id/tags | required | Add/upsert tag |\n| DELETE | /api/payments/:id/tags/:tagId | required | Remove tag |\n| POST | /api/upload/csv | required | DSK CSV file upload (source=UPLOAD) |\n\n---\n\n## Key Implementation Details\n\n### auth.js (replaces entire old auth module)\n```js\nconst PUBLIC_PATHS = new Set(['/api/health', '/api/payments/ingest']);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n const username = req.headers['x-authentik-username'];\n if (!username) return res.status(401).json({ error: 'Unauthorized' });\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '').split(',').map(g => g.trim()).filter(Boolean),\n };\n next();\n}\nmodule.exports = { authentikMiddleware };\n```\n\n### csvParser.js (port of dskuploader.py)\n- `iconv-lite` decodes buffer as cp1251 (DSK Bank export encoding), falls back to UTF-8\n- `csv-parse` parses the decoded text with `columns: true`\n- Columns: `Дата`, `Вид на трансакцията`, `Основание`, `Дебит BGN`, `Кредит BGN`, `Наредител/Получател`, `Номер сметка на наредителя / получателя`\n- Card extraction: regex `/^\\d{6}x{6}\\d{4}$/` on first token of `Основание`\n- Skips rows where `Вид на трансакцията === 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ'`\n- Auto-tags via keyword rules (ЗАПЛАТА→Salary, LIDL→Groceries, NETFLIX→Subscriptions, etc.) — same logic as Python `generate_tags()`\n- Returns `{ rows: PaymentData[], skipped: number, errors: string[] }`\n\n### payments.js changes from payments-logger\n1. Add `source: 'INGEST'` and `currency` to the `/ingest` create call\n2. Add `source` to the `GET /` where clause filter\n3. Add `sources` to `meta/filters` response\n4. Currency-aware amount formatting in notification message\n5. Remove all JWT/auth references (no `/auth/register`, `/auth/login`)\n\n### upload.js (new)\n- `multer` memory storage, max 10 files × 10 MB\n- Calls `parseDskCsv(buffer)` per file\n- Upserts tags via `prisma.tag.upsert` then connects\n- Returns `{ imported, skipped, errors, payments[] }`\n\n### Frontend changes\n- **Delete**: `auth.js`, `AuthProvider.jsx`\n- **main.jsx**: Remove `<AuthProvider>` wrapper\n- **App.jsx**: Replace `authFetch` with plain `fetch` (Authentik session cookie travels automatically); logout → `window.location.href = '/outpost.goauthentik.io/sign_out'`; add \"Payments\" / \"Upload CSV\" tab toggle\n- **FilterBar.jsx**: Add source `<select>` (All / SMS Ingest / CSV Upload); widen grid to 5 cols\n- **PaymentTable.jsx**: Add `Source` column with `SMS` (indigo) / `CSV` (emerald) badge; show `${amount} ${currency}` in amount cell\n- **UploadPanel.jsx** (new): Drag-and-drop zone + file list + import button + result summary with error accordion; calls `POST /api/upload/csv` with `FormData`\n\n---\n\n## Docker Compose\n\n```yaml\nservices:\n db:\n image: postgres:16-alpine\n environment: { POSTGRES_USER: finance, POSTGRES_PASSWORD: ${DB_PASSWORD}, POSTGRES_DB: finance_hub }\n volumes: [pgdata:/var/lib/postgresql/data]\n healthcheck: { test: pg_isready -U finance -d finance_hub, interval: 5s }\n\n backend:\n build: ./backend\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports: [\"${BACKEND_PORT:-3001}:3001\"]\n depends_on: { db: { condition: service_healthy } }\n\n frontend:\n build: ./frontend\n ports: [\"${FRONTEND_PORT:-5175}:5173\"]\n depends_on: [backend]\n\nvolumes: { pgdata: }\n```\n\n**NPM setup:** Frontend port proxied through Authentik forward auth. Backend port exposed separately (unprotected) so the public `/api/payments/ingest` remains reachable by iOS Shortcuts / SMS gateways without login.\n\n---\n\n## Environment Variables (.env)\n\n```bash\nDB_PASSWORD=change_me\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\nTZ=Europe/Sofia\nBACKEND_PORT=3001\nFRONTEND_PORT=5175\n```\n\nRemoved vs payments-logger: `JWT_SECRET`, `JWT_EXPIRE_MINUTES`.\n\n---\n\n## Implementation Order\n\n1. Create folder structure and write `docker-compose.yml`, `.env.example`, `.gitignore`\n2. Write `backend/prisma/schema.prisma` and migration SQL\n3. Write `backend/package.json` (add `csv-parse`, `iconv-lite`, `multer`; remove `bcryptjs`, `jose`)\n4. Write `backend/Dockerfile`\n5. Write `backend/src/auth.js` (Authentik middleware)\n6. Copy `backend/src/parser.js` verbatim from payments-logger\n7. Write `backend/src/csvParser.js` (Python port)\n8. Write `backend/src/routes/upload.js`\n9. Write `backend/src/routes/payments.js` (from payments-logger + 5 changes listed above)\n10. Write `backend/src/index.js`\n11. Copy frontend base from payments-logger; delete `auth.js` + `AuthProvider.jsx`\n12. Update `main.jsx`, `App.jsx`, `FilterBar.jsx`, `PaymentTable.jsx`\n13. Write `frontend/src/components/UploadPanel.jsx`\n14. Update `frontend/vite.config.js`\n15. `docker compose build && docker compose up -d`\n16. Run verification checklist\n\n---\n\n## Verification\n\n**Schema**\n- `payments` table has `source`, `currency`, `debit_bgn`, `credit_bgn`, `transaction_type`, `payer_account`\n- No `users` table; `Source` enum exists\n\n**Auth**\n- `GET /api/payments` → 401 without `x-authentik-username` header\n- `POST /api/payments/ingest` → 201 without any header\n- `curl -H \"x-authentik-username: test\" localhost:3001/api/payments` → 200\n\n**SMS Ingest**\n- DSK POS SMS → `source=INGEST`, `currency=EUR`, correct amount/card/recipient\n- Apple Wallet structured body → `type=WALLET`, `source=INGEST`\n- Rate limiter → 429 after 200 req/min\n\n**CSV Upload**\n- Single DSK CSV → rows with `source=UPLOAD`, `currency=BGN`\n- Multiple CSVs in one request → all merged\n- `ТРАНСФЕР СОБСТВЕНИ СМЕТКИ` rows counted in `skipped`, not imported\n- Card regex match from `Основание` column\n- Auto-tags applied (ЗАПЛАТА→Salary, LIDL→Groceries)\n- cp1251 file imports correctly\n\n**UI**\n- Source badge visible in payment table (SMS indigo, CSV emerald)\n- Source dropdown in FilterBar filters correctly\n- Amount shows correct currency per row\n- Upload Panel: drag-and-drop works, result summary shows counts\n- Logout redirects to Authentik sign_out\n- No login form shown (Authentik handles it at NPM level)\n- Tags, send, skip, delete all still work\n\n## Reference Files\n\n- `/volume2/docker/finance/payments-logger/backend/src/routes/payments.js`\n- `/volume2/docker/finance/payments-logger/backend/src/parser.js`\n- `/volume2/docker/finance/payments-logger/backend/src/index.js`\n- `/volume2/docker/finance/payments-logger/backend/src/auth.js`\n- `/volume2/docker/finance/payments-logger/backend/prisma/schema.prisma`\n- `/volume2/docker/finance/payments-logger/frontend/src/App.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/PaymentTable.jsx`\n- `/volume2/docker/finance/payments-logger/frontend/src/components/FilterBar.jsx`\n- `/volume2/docker/finance/dsk-uploader/dskuploader.py`\n- `/volume2/docker/finance/auth/docker-compose.yml`","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Claude’s Plan","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"ets-create-a-new-generic-sun.md","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ets-create-a-new-generic-sun.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stayed in plan mode","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good question. Here's the full breakdown:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Backend Tech Stack — Options","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Backend Tech Stack — Options","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option A: Node.js + Express + Prisma (my recommendation)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Why:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger is already Node.js/Express/Prisma. The new app is 80% payments-logger with CSV upload added on top. Keeping the same stack means:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"verbatim, zero rewrite","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Copy the entire","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"routes/payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with minimal edits","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Same Prisma schema workflow, same migrations, same Docker image","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parsing logic (the only Python-specific thing) ports cleanly to","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"csv-parse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— it's just regex + string manipulation, nothing pandas-specific","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Trade-off:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Have to port the Python CSV parsing to JS. It's ~150 lines and mostly string manipulation — straightforward.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option B: Python + FastAPI + SQLAlchemy","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option B: Python + FastAPI + SQLAlchemy","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rewrite everything in Python. dsk-uploader is Python, so CSV parsing is already done.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep the dsk-uploader CSV logic as-is (no porting). Python has better data science libraries if you later add analytics.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Lose the entire payments-logger backend (routes, parser, Prisma schema) — full rewrite. FastAPI + SQLAlchemy is a different mental model than Express + Prisma. Frontend stays React anyway, so the stack split doesn't simplify anything.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"More work overall, gains almost nothing.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option C: Hybrid microservices (Node.js backend + Python CSV service)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Keep Node.js as the main API, add a separate Python FastAPI service just for CSV parsing. They share the DB.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Zero porting — Python CSV code used as-is.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Two backend services to maintain, deploy, and keep in sync. Inter-service HTTP calls. Two Dockerfiles. For ~150 lines of CSV logic, this is massively over-engineered.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Not worth it.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Option D: Python + Flask (exactly like dsk-uploader)","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Extend dsk-uploader into a full payments app.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pro:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Pandas for CSV, no porting.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Con:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Jinja2 templates instead of React (or add React separately). Would need to reimplement the entire payments-logger (SMS parser, notification system, tag management, pagination/filtering). Flask's Jinja templating is far less capable than the existing React UI. The React frontend is the stronger UI foundation.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Verdict:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst of all options — rebuild the harder parts (UI, SMS parser, notification) for no gain.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"Summary","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Summary","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"A (Node.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"B (Python FastAPI)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"C (Hybrid)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"D (Python Flask)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Medium (150 lines)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"None","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Minimal","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"High (full backend)","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Low + infra overhead","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Very high","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Best","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worse","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Overkill","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Worst","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Option","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"CSV porting effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"App rewrite effort","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Result quality","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The CSV parser port (the only cost of Option A) is a one-time ~150 line exercise. Everything else in the plan reuses payments-logger code directly. That's why Node.js is the clear winner here.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Want to adjust the stack, or shall I proceed with Option A?","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ok sounds good. Implement all you suggested","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Starting implementation. Let me first read all the reference files I'll need to copy from.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"parser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":",","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"App.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"FilterBar.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"FilterBar.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentTable.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentTable.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now let me read the remaining frontend files and the Dockerfile from payments-logger.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.css","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.css","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"tailwind.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tailwind.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"postcss.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"postcss.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"dskuploader.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"dskuploader.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me also grab the remaining frontend components.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentCard.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentCard.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"PaymentList.jsx","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PaymentList.jsx","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Good, I have everything I need. Let me set up the todo list and start building.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create finance-hub directory structure","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"mkdir -p /volume2/docker/finance/finance-hub/backend/src/routes \\\n /volume2/docker/finance/finance-hub/backend/prisma/migrations/20260508_init \\\n /volume2/docker/finance/finance-hub/frontend/src/components && echo \"done\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"done","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"docker-compose.yml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"45 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"version: '3.8'\n\nservices:\n db:\n image: postgres:16-alpine\n restart: unless-stopped\n environment:\n POSTGRES_USER: finance\n POSTGRES_PASSWORD: ${DB_PASSWORD}\n POSTGRES_DB: finance_hub\n volumes:\n - pgdata:/var/lib/postgresql/data\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U finance -d finance_hub\"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n backend:\n build: ./backend\n restart: unless-stopped\n environment:\n DATABASE_URL: postgresql://finance:${DB_PASSWORD}@db:5432/finance_hub\n PORT: \"3001\"\n NOTIFIER_URL: ${NOTIFIER_URL}\n NOTIFIER_CHANNEL: ${NOTIFIER_CHANNEL:-viber}\n NOTIFY_DEFAULT_PHONE: ${NOTIFY_DEFAULT_PHONE}\n TZ: ${TZ:-Europe/Sofia}\n ports:\n - \"${BACKEND_PORT:-3001}:3001\"\n depends_on:\n db:\n condition: service_healthy\n\n frontend:\n build: ./frontend\n restart: unless-stopped\n ports:\n - \"${FRONTEND_PORT:-5175}:5173\"\n depends_on:\n - backend\n\nvolumes:\n pgdata:","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".env.example","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".env.example","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"15 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Database\nDB_PASSWORD=change_me_strong_password\n\n# Notifier service (for SMS payment notifications)\nNOTIFIER_URL=https://notifier.lakylak.xyz\nNOTIFIER_CHANNEL=viber\nNOTIFY_DEFAULT_PHONE=+359000000000\n\n# Timezone (used by SMS parser for Bulgarian bank timestamps)\nTZ=Europe/Sofia\n\n# Ports (optional — defaults shown)\nBACKEND_PORT=3001\nFRONTEND_PORT=5175","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":".gitignore","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".gitignore","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"5 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env\nnode_modules/\ndist/\n*.log","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"schema.prisma","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"schema.prisma","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"54 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"generator client {\n provider = \"prisma-client-js\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\nmodel Payment {\n id Int @id @default(autoincrement())\n rawMessage String @map(\"raw_message\")\n date DateTime?\n type String?\n card String?\n recipient String?\n amount Float?\n currency String? @default(\"EUR\")\n balance Float?\n source Source @default(INGEST)\n status Status @default(UNPROCESSED)\n tags Tag[]\n notifiedAt DateTime? @map(\"notified_at\")\n notifyPhone String? @map(\"notify_phone\")\n debitBgn Float? @map(\"debit_bgn\")\n creditBgn Float? @map(\"credit_bgn\")\n transactionType String? @map(\"transaction_type\")\n payerAccount String? @map(\"payer_account\")\n createdAt DateTime @default(now()) @map(\"created_at\")\n updatedAt DateTime @updatedAt @map(\"updated_at\")\n\n @@map(\"payments\")\n}\n\nmodel Tag {\n id Int @id @default(autoincrement())\n name String @unique\n color String @default(\"#6b7280\")\n payments Payment[]\n\n @@map(\"tags\")\n}\n\nenum Status {\n UNPROCESSED\n SENT\n SKIPPED\n}\n\nenum Source {\n INGEST\n UPLOAD\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration.sql","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration.sql","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"55 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"-- CreateEnum\nCREATE TYPE \"Status\" AS ENUM ('UNPROCESSED', 'SENT', 'SKIPPED');\nCREATE TYPE \"Source\" AS ENUM ('INGEST', 'UPLOAD');\n\n-- CreateTable\nCREATE TABLE \"payments\" (\n \"id\" SERIAL PRIMARY KEY,\n \"raw_message\" TEXT NOT NULL,\n \"date\" TIMESTAMP(3),\n \"type\" TEXT,\n \"card\" TEXT,\n \"recipient\" TEXT,\n \"amount\" DOUBLE PRECISION,\n \"currency\" TEXT DEFAULT 'EUR',\n \"balance\" DOUBLE PRECISION,\n \"source\" \"Source\" NOT NULL DEFAULT 'INGEST',\n \"status\" \"Status\" NOT NULL DEFAULT 'UNPROCESSED',\n \"notified_at\" TIMESTAMP(3),\n \"notify_phone\" TEXT,\n \"debit_bgn\" DOUBLE PRECISION,\n \"credit_bgn\" DOUBLE PRECISION,\n \"transaction_type\" TEXT,\n \"payer_account\" TEXT,\n \"created_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,\n \"updated_at\" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\n-- CreateTable\nCREATE TABLE \"tags\" (\n \"id\" SERIAL PRIMARY KEY,\n \"name\" TEXT NOT NULL,\n \"color\" TEXT NOT NULL DEFAULT '#6b7280'\n);\n\n-- CreateUniqueIndex\nCREATE UNIQUE INDEX \"tags_name_key\" ON \"tags\"(\"name\");\n\n-- CreateTable (M2M join)\nCREATE TABLE \"_PaymentToTag\" (\n \"A\" INTEGER NOT NULL,\n \"B\" INTEGER NOT NULL,\n CONSTRAINT \"_PaymentToTag_AB_pkey\" PRIMARY KEY (\"A\", \"B\")\n);\n\nCREATE INDEX \"_PaymentToTag_B_index\" ON \"_PaymentToTag\"(\"B\");\n\n-- AddForeignKey\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_A_fkey\"\n FOREIGN KEY (\"A\") REFERENCES \"payments\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;\n\nALTER TABLE \"_PaymentToTag\"\n ADD CONSTRAINT \"_PaymentToTag_B_fkey\"\n FOREIGN KEY (\"B\") REFERENCES \"tags\"(\"id\") ON DELETE CASCADE ON UPDATE CASCADE;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"migration_lock.toml","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"migration_lock.toml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"# Please do not edit this file manually\n# It should be added in your version-control system (e.g., Git)\nprovider = \"postgresql\"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"26 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-backend\",\n \"version\": \"1.0.0\",\n \"main\": \"src/index.js\",\n \"scripts\": {\n \"start\": \"node src/index.js\",\n \"dev\": \"nodemon src/index.js\",\n \"prisma:generate\": \"prisma generate\",\n \"prisma:migrate\": \"prisma migrate deploy\"\n },\n \"dependencies\": {\n \"@prisma/client\": \"^5.22.0\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.5.6\",\n \"express\": \"^4.21.1\",\n \"express-rate-limit\": \"^7.4.0\",\n \"iconv-lite\": \"^0.6.3\",\n \"morgan\": \"^1.10.0\",\n \"multer\": \"^1.4.5-lts.1\"\n },\n \"devDependencies\": {\n \"nodemon\": \"^3.1.7\",\n \"prisma\": \"^5.22.0\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FROM node:20-alpine\n\nRUN apk add --no-cache openssl\n\nWORKDIR /app\n\nCOPY package.json package-lock.json* ./\nRUN npm install\n\nCOPY prisma ./prisma\nRUN npx prisma generate\n\nCOPY src ./src\n\nEXPOSE 3001\n\nCMD [\"sh\", \"-c\", \"npx prisma migrate deploy && node src/index.js\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"auth.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"auth.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"27 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const PUBLIC_PATHS = new Set([\n '/api/health',\n '/api/payments/ingest',\n]);\n\nfunction authentikMiddleware(req, res, next) {\n if (PUBLIC_PATHS.has(req.path)) return next();\n\n const username = req.headers['x-authentik-username'];\n if (!username) {\n return res.status(401).json({ error: 'Unauthorized — missing Authentik session' });\n }\n\n req.user = {\n username,\n email: req.headers['x-authentik-email'] || null,\n groups: (req.headers['x-authentik-groups'] || '')\n .split(',')\n .map(g => g.trim())\n .filter(Boolean),\n };\n\n next();\n}\n\nmodule.exports = { authentikMiddleware };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"parser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"parser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"104 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/**\n * Parses SMS payment messages from Bulgarian banks (DSK Bank, etc.)\n *\n * Supported formats:\n *\n * POS / INTERNET / ECOM / P2P payment:\n * DSK Bank. Na DD/MM/YYYY v HH:MM sa plateni AMOUNT CURRENCY s karta CARD na POS s adres: RECIPIENT. Nalichni: BALANCE CURRENCY.\n *\n * ATM withdrawal:\n * DSK Bank. Na DD/MM/YYYY v HH:MM sa iztegleni AMOUNT CURRENCY s karta CARD ot ATM s adres: RECIPIENT. Nalichni: BALANCE CURRENCY.\n *\n * ATM utility payment (amount may include fee as AMOUNT/FEE):\n * DSK Bank. Na DD/MM/YYYY v HH:MM sa plateni AMOUNT CURRENCY/FEE CURRENCY s karta CARD na ATM s adres:RECIPIENT. Nalichni: BALANCE CURRENCY.\n */\n\nconst LOCAL_TZ = process.env.TZ || 'Europe/Sofia';\n\n/**\n * Convert a local-timezone date/time to a UTC Date object.\n * Uses Intl to resolve the actual UTC offset (DST-aware).\n */\nfunction localToUtc(year, month, day, hour, minute) {\n const naive = new Date(Date.UTC(year, month - 1, day, hour, minute, 0));\n\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: LOCAL_TZ,\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n hour12: false,\n });\n\n const parts = {};\n formatter.formatToParts(naive).forEach(p => { parts[p.type] = p.value; });\n\n const localAtNaive = new Date(Date.UTC(\n parseInt(parts.year), parseInt(parts.month) - 1, parseInt(parts.day),\n parseInt(parts.hour) % 24, parseInt(parts.minute), parseInt(parts.second),\n ));\n\n const offsetMs = localAtNaive.getTime() - naive.getTime();\n return new Date(Date.UTC(year, month - 1, day, hour, minute, 0) - offsetMs);\n}\n\nfunction parsePaymentSms(message) {\n const result = {\n rawMessage: message,\n date: null,\n type: null,\n card: null,\n recipient: null,\n amount: null,\n balance: null,\n };\n\n // Date and time: \"Na DD/MM/YYYY v HH:MM\"\n const dateMatch = message.match(/Na (\\d{2})\\/(\\d{2})\\/(\\d{4}) v (\\d{2}):(\\d{2})/i);\n if (dateMatch) {\n const [, day, month, year, hour, minute] = dateMatch;\n result.date = localToUtc(\n parseInt(year), parseInt(month), parseInt(day),\n parseInt(hour), parseInt(minute),\n );\n }\n\n // Card mask: \"s karta 400915***4447\" or \"s karta 483890***7162\"\n const cardMatch = message.match(/s karta\\s+([\\d*]+)/i);\n if (cardMatch) {\n result.card = cardMatch[1];\n }\n\n // Transaction type: supports both prepositions\n // \"na POS\" / \"na ATM\" / \"na INTERNET\" etc. (payment)\n // \"ot ATM\" (withdrawal)\n const typeMatch = message.match(/(?:na|ot)\\s+(POS|ATM|INTERNET|ECOM|P2P)\\b/i);\n if (typeMatch) {\n result.type = typeMatch[1].toUpperCase();\n }\n\n // Recipient address: \"s adres: MERCHANT\" or \"s adres:MERCHANT\" (no space variant)\n const recipientMatch = message.match(/s adres:\\s*([^.]+)\\./i);\n if (recipientMatch) {\n result.recipient = recipientMatch[1].trim();\n }\n\n // Amount: handles both verbs and the AMOUNT/FEE suffix format\n // \"sa plateni 7.78 EUR\"\n // \"sa iztegleni 400.00 EUR\"\n // \"sa plateni 0.50 EUR/0.50 EUR\" → captures 0.50 (the charged amount, ignoring fee)\n const amountMatch = message.match(/sa (?:plateni|iztegleni)\\s+([\\d.,]+)\\s+[A-Z]{3}/i);\n if (amountMatch) {\n result.amount = parseFloat(amountMatch[1].replace(',', '.'));\n }\n\n // Balance: \"Nalichni: 2583.07 EUR.\"\n const balanceMatch = message.match(/Nalichni:\\s*([\\d.,]+)\\s+[A-Z]{3}/i);\n if (balanceMatch) {\n result.balance = parseFloat(balanceMatch[1].replace(',', '.'));\n }\n\n return result;\n}\n\nmodule.exports = { parsePaymentSms };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"csvParser.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"csvParser.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"175 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/**\n * DSK Bank CSV parser — Node.js port of dskuploader.py\n *\n * DSK Bank exports use Windows-1251 (cp1251) encoding.\n * Each row maps to a Payment record with source=UPLOAD, currency=BGN.\n */\n\nconst { parse } = require('csv-parse');\nconst iconv = require('iconv-lite');\n\nconst SKIP_TYPE = 'ТРАНСФЕР СОБСТВЕНИ СМЕТКИ';\nconst CARD_REGEX = /^\\d{6}x{6}\\d{4}$/;\nconst POS_REGEX = /^\\s*ПЛАЩАНЕ\\s+НА\\s+ПОС\\s+\\d{2}\\.\\d{2}\\.\\d{4}\\s+\\d{2}:\\d{2}/;\n\nconst COL = {\n DATE: 'Дата',\n TYPE: 'Вид на трансакцията',\n REASON: 'Основание',\n DEBIT: 'Дебит BGN',\n CREDIT: 'Кредит BGN',\n PAYEE: 'Наредител/Получател',\n ACCT: 'Номер сметка на наредителя / получателя',\n};\n\nconst TAG_RULES = [\n ['reason', 'ЗАПЛАТА', 'Salary'],\n ['reason', 'ТЕГЛЕНЕ НА ATM', 'ATM'],\n ['reason', 'ПЛАЩАНЕ ПО ЗАЕМ', 'Home Credit'],\n ['reason', 'АВТ.ТАКСА ОБСЛУЖВАНЕ', 'Bills'],\n ['transactionType', 'КОМУНАЛНИ УСЛУГИ', 'Bills'],\n ['payee', 'VIVACOM', 'Subscriptions'],\n ['payee', 'Google', 'Subscriptions'],\n ['payee', 'SkyShowtime', 'Subscriptions'],\n ['payee', 'NETFLIX', 'Subscriptions'],\n ['payee', 'LUKOIL', 'Bills'],\n ['payee', 'CityGate', 'Bills'],\n ['payee', 'CBA', 'Groceries'],\n ['payee', 'FANTASTICO', 'Groceries'],\n ['payee', 'LIDL', 'Groceries'],\n];\n\nfunction parseNum(val) {\n if (val == null || val === '') return null;\n if (typeof val === 'number') return isNaN(val) ? null : val;\n const s = String(val).trim().replace(/\\xa0/g, '').replace(/ /g, '').replace(',', '.');\n const n = parseFloat(s);\n return isNaN(n) ? null : n;\n}\n\nfunction parseDate(val) {\n if (!val) return null;\n const s = String(val).trim();\n const m = s.match(/^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/);\n if (m) {\n return new Date(Date.UTC(parseInt(m[3]), parseInt(m[2]) - 1, parseInt(m[1])));\n }\n return null;\n}\n\nfunction processReasonAndCard(reason) {\n if (!reason || typeof reason !== 'string') return { reason: '', card: null };\n\n const parts = reason.trim().split(' ');\n let card = null;\n let cleanReason = reason.trim();\n\n if (parts[0] && CARD_REGEX.test(parts[0])) {\n card = parts[0];\n cleanReason = parts.slice(1).join(' ').trim();\n }\n\n if (POS_REGEX.test(cleanReason)) {\n const posParts = cleanReason.split('<br/>');\n try {\n const dateTime = posParts[0].split('ПОС ')[1];\n cleanReason = `POS PAYMENT ${dateTime}`;\n } catch (_) { /* keep original */ }\n }\n\n return { reason: cleanReason.replace(/\\s+/g, ' ').trim(), card };\n}\n\nfunction generateTags(fields) {\n const tags = new Set();\n for (const [field, keyword, tagName] of TAG_RULES) {\n if ((fields[field] || '').includes(keyword)) {\n tags.add(tagName);\n }\n }\n return Array.from(tags);\n}\n\nfunction processRow(row) {\n const transactionType = (row[COL.TYPE] || '').trim();\n if (transactionType === SKIP_TYPE) return null;\n\n const { reason, card } = processReasonAndCard(row[COL.REASON]);\n const payee = (row[COL.PAYEE] || '').trim();\n const payerAccount = (row[COL.ACCT] || '').trim();\n const debitBgn = parseNum(row[COL.DEBIT]);\n const creditBgn = parseNum(row[COL.CREDIT]);\n const date = parseDate(row[COL.DATE]);\n\n const autoTags = generateTags({ reason, transactionType, payee, debitBgn, creditBgn });\n\n const amount = debitBgn ?? creditBgn ?? null;\n\n const rawMessage = [\n row[COL.DATE] && `Date: ${row[COL.DATE]}`,\n transactionType && `Type: ${transactionType}`,\n payee && `Payee: ${payee}`,\n debitBgn != null && `Debit: ${debitBgn} BGN`,\n creditBgn != null && `Credit: ${creditBgn} BGN`,\n ].filter(Boolean).join(' | ');\n\n return {\n rawMessage,\n date,\n type: null,\n card,\n recipient: payee || null,\n amount,\n currency: 'BGN',\n balance: null,\n source: 'UPLOAD',\n debitBgn,\n creditBgn,\n transactionType: transactionType || null,\n payerAccount: payerAccount || null,\n autoTags,\n };\n}\n\n/**\n * Parse a Buffer containing a DSK Bank CSV (cp1251 or UTF-8).\n * Returns { rows, skipped, errors }.\n */\nasync function parseDskCsv(buffer) {\n // Try cp1251 first (DSK Bank export encoding), fall back to UTF-8\n let text = iconv.decode(buffer, 'cp1251');\n if (!text.includes(COL.DATE)) {\n text = buffer.toString('utf-8');\n }\n\n return new Promise((resolve, reject) => {\n const rows = [];\n const errors = [];\n let skipped = 0;\n\n const parser = parse(text, {\n columns: true,\n skip_empty_lines: true,\n trim: true,\n relax_column_count: true,\n });\n\n parser.on('readable', () => {\n let record;\n while ((record = parser.read()) !== null) {\n try {\n const row = processRow(record);\n if (row === null) { skipped++; } else { rows.push(row); }\n } catch (err) {\n errors.push(err.message);\n }\n }\n });\n\n parser.on('error', reject);\n parser.on('end', () => resolve({ rows, skipped, errors }));\n });\n}\n\nmodule.exports = { parseDskCsv };","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"39 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const express = require('express');\nconst cors = require('cors');\nconst morgan = require('morgan');\nconst rateLimit = require('express-rate-limit');\nconst { authentikMiddleware } = require('./auth');\nconst paymentsRouter = require('./routes/payments');\nconst uploadRouter = require('./routes/upload');\n\nconst app = express();\nconst PORT = process.env.PORT || 3001;\n\napp.use(cors());\napp.use(express.json({ limit: '16kb' }));\napp.use(morgan('combined'));\n\n// Rate-limit the public ingest endpoint before auth middleware\nconst ingestLimiter = rateLimit({\n windowMs: 60 * 1000,\n max: 200,\n standardHeaders: true,\n legacyHeaders: false,\n message: { error: 'Too many requests, slow down' },\n});\napp.use('/api/payments/ingest', ingestLimiter);\n\n// Authentik header auth (skips /api/health and /api/payments/ingest)\napp.use(authentikMiddleware);\n\napp.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\napp.use('/api/payments', paymentsRouter);\napp.use('/api/upload', uploadRouter);\n\napp.listen(PORT, '0.0.0.0', () => {\n console.log(`Finance Hub API running on port ${PORT}`);\n});","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"payments.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"399 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const express = require('express');\nconst { PrismaClient } = require('@prisma/client');\nconst { parsePaymentSms } = require('../parser');\n\nconst router = express.Router();\nconst prisma = new PrismaClient();\n\nconst NOTIFIER_URL = process.env.NOTIFIER_URL;\nconst NOTIFIER_CHANNEL = process.env.NOTIFIER_CHANNEL || 'viber';\nconst DEFAULT_PHONE = process.env.NOTIFY_DEFAULT_PHONE;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction parseId(raw) {\n const id = parseInt(raw, 10);\n return Number.isFinite(id) ? id : null;\n}\n\nfunction formatNotifyMessage(payment) {\n const currency = payment.currency || 'EUR';\n const parts = [];\n if (payment.amount != null) parts.push(`Amount: ${payment.amount.toFixed(2)} ${currency}`);\n if (payment.recipient) parts.push(`At: ${payment.recipient}`);\n if (payment.balance != null) parts.push(`Balance: ${payment.balance.toFixed(2)} ${currency}`);\n if (payment.date) parts.push(`Date: ${new Date(payment.date).toLocaleString('en-GB')}`);\n return parts.join('\\n');\n}\n\nasync function sendNotification(payment) {\n if (!NOTIFIER_URL) {\n console.warn('[NOTIFY] NOTIFIER_URL not set — skipping notification');\n return;\n }\n\n const phone = payment.notifyPhone || DEFAULT_PHONE;\n if (!phone) {\n console.warn('[NOTIFY] No phone number for payment #' + payment.id + ' and NOTIFY_DEFAULT_PHONE not set');\n return;\n }\n\n const body = {\n phone,\n notification: NOTIFIER_CHANNEL,\n message: formatNotifyMessage(payment),\n };\n\n const res = await fetch(NOTIFIER_URL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(`Notifier responded ${res.status}: ${text}`);\n }\n}\n\n// ── Ingest a payment (public — no auth) ──────────────────────────────────────\n//\n// Two modes:\n//\n// SMS mode (default):\n// { \"message\": \"<raw SMS text>\", \"notifyPhone\": \"...\" }\n//\n// Structured mode (Apple Wallet / manual):\n// { \"ingestMode\": \"apple_wallet\", \"amount\": 7.78, \"recipient\": \"Apple Store\",\n// \"type\": \"WALLET\", \"card\": \"••••4447\", \"date\": \"2026-02-22T10:30:00Z\" }\n//\nrouter.post('/ingest', async (req, res) => {\n try {\n const { message, notifyPhone, ingestMode } = req.body;\n\n let data;\n\n if (ingestMode === 'apple_wallet' || (!message && req.body.amount != null)) {\n // ── Structured / Apple Wallet mode ──────────────────────────────────────\n const { amount, recipient, type, card, date, balance } = req.body;\n if (amount == null || !recipient) {\n return res.status(400).json({ error: 'amount and recipient are required for structured ingest' });\n }\n\n const rawMessage = [\n `Source: ${ingestMode || 'structured'}`,\n `Amount: ${amount}`,\n recipient && `Recipient: ${recipient}`,\n type && `Type: ${type}`,\n card && `Card: ${card}`,\n ].filter(Boolean).join(' | ');\n\n data = {\n rawMessage,\n date: date ? new Date(date) : new Date(),\n type: type || 'WALLET',\n card: card || null,\n recipient,\n amount: parseFloat(amount),\n currency: 'EUR',\n balance: balance != null ? parseFloat(balance) : null,\n source: 'INGEST',\n notifyPhone: notifyPhone || null,\n };\n\n } else {\n // ── SMS mode ─────────────────────────────────────────────────────────────\n if (!message) {\n return res.status(400).json({ error: 'message is required' });\n }\n if (typeof message !== 'string' || message.length > 2000) {\n return res.status(400).json({ error: 'message must be a string under 2000 characters' });\n }\n\n const parsed = parsePaymentSms(message);\n data = {\n rawMessage: parsed.rawMessage,\n date: parsed.date,\n type: parsed.type,\n card: parsed.card,\n recipient: parsed.recipient,\n amount: parsed.amount,\n currency: 'EUR',\n balance: parsed.balance,\n source: 'INGEST',\n notifyPhone: notifyPhone || null,\n };\n }\n\n const payment = await prisma.payment.create({\n data,\n include: { tags: true },\n });\n\n res.status(201).json(payment);\n } catch (err) {\n console.error('Ingest error:', err);\n res.status(500).json({ error: 'Failed to ingest payment' });\n }\n});\n\n// ── List payments with filtering ──────────────────────────────────────────────\nrouter.get('/', async (req, res) => {\n try {\n const {\n status,\n type,\n tag,\n source,\n recipient,\n dateFrom,\n dateTo,\n search,\n sortBy = 'createdAt',\n sortDir = 'desc',\n page = 1,\n } = req.query;\n\n const limit = Math.min(parseInt(req.query.limit, 10) || 50, 200);\n\n const where = {};\n\n if (status) where.status = status;\n if (type) where.type = type;\n if (source) where.source = source;\n if (recipient) where.recipient = { contains: recipient, mode: 'insensitive' };\n if (tag) where.tags = { some: { name: tag } };\n if (search) {\n where.OR = [\n { rawMessage: { contains: search, mode: 'insensitive' } },\n { recipient: { contains: search, mode: 'insensitive' } },\n ];\n }\n if (dateFrom || dateTo) {\n where.date = {};\n if (dateFrom) where.date.gte = new Date(dateFrom);\n if (dateTo) where.date.lte = new Date(dateTo);\n }\n\n const allowedSortFields = ['date', 'amount', 'balance', 'recipient', 'type', 'source', 'createdAt', 'status'];\n const orderField = allowedSortFields.includes(sortBy) ? sortBy : 'createdAt';\n const orderDir = sortDir === 'asc' ? 'asc' : 'desc';\n\n const skip = (parseInt(page, 10) - 1) * limit;\n\n const [payments, total] = await Promise.all([\n prisma.payment.findMany({\n where,\n include: { tags: true },\n orderBy: { [orderField]: orderDir },\n skip,\n take: limit,\n }),\n prisma.payment.count({ where }),\n ]);\n\n res.json({ payments, total, page: parseInt(page, 10), limit });\n } catch (err) {\n console.error('List error:', err);\n res.status(500).json({ error: 'Failed to list payments' });\n }\n});\n\n// ── Get filter options ────────────────────────────────────────────────────────\nrouter.get('/meta/filters', async (_req, res) => {\n try {\n const [types, recipients, tags, sources] = await Promise.all([\n prisma.payment.findMany({ distinct: ['type'], select: { type: true }, where: { type: { not: null } } }),\n prisma.payment.findMany({ distinct: ['recipient'], select: { recipient: true }, where: { recipient: { not: null } } }),\n prisma.tag.findMany({ orderBy: { name: 'asc' } }),\n prisma.payment.findMany({ distinct: ['source'], select: { source: true } }),\n ]);\n\n res.json({\n types: types.map(t => t.type),\n recipients: recipients.map(r => r.recipient),\n tags,\n sources: sources.map(s => s.source),\n });\n } catch (err) {\n res.status(500).json({ error: 'Failed to get filters' });\n }\n});\n\n// ── Get all tags ──────────────────────────────────────────────────────────────\nrouter.get('/meta/tags', async (_req, res) => {\n try {\n const tags = await prisma.tag.findMany({ orderBy: { name: 'asc' } });\n res.json(tags);\n } catch (err) {\n res.status(500).json({ error: 'Failed to list tags' });\n }\n});\n\n// ── Get single payment ────────────────────────────────────────────────────────\nrouter.get('/:id', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const payment = await prisma.payment.findUnique({\n where: { id },\n include: { tags: true },\n });\n if (!payment) return res.status(404).json({ error: 'Not found' });\n res.json(payment);\n } catch (err) {\n console.error('Get error:', err);\n res.status(500).json({ error: 'Failed to get payment' });\n }\n});\n\n// ── Update payment metadata (status) ─────────────────────────────────────────\nrouter.patch('/:id', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const { status } = req.body;\n const data = {};\n\n if (status) {\n const validStatuses = ['UNPROCESSED', 'SENT', 'SKIPPED'];\n if (!validStatuses.includes(status)) {\n return res.status(400).json({ error: `Invalid status. Must be one of: ${validStatuses.join(', ')}` });\n }\n data.status = status;\n }\n\n if (Object.keys(data).length === 0) {\n return res.status(400).json({ error: 'No valid fields to update' });\n }\n\n const updated = await prisma.payment.update({\n where: { id },\n data,\n include: { tags: true },\n });\n res.json(updated);\n } catch (err) {\n if (err.code === 'P2025') return res.status(404).json({ error: 'Not found' });\n console.error('Update error:', err);\n res.status(500).json({ error: 'Failed to update payment' });\n }\n});\n\n// ── Delete payment ───────────────────────────────────────────────────────────\nrouter.delete('/:id', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n await prisma.payment.delete({ where: { id } });\n res.json({ success: true });\n } catch (err) {\n if (err.code === 'P2025') return res.status(404).json({ error: 'Not found' });\n console.error('Delete error:', err);\n res.status(500).json({ error: 'Failed to delete payment' });\n }\n});\n\n// ── Send notification (mark as SENT + call notifier service) ─────────────────\nrouter.post('/:id/send', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const payment = await prisma.payment.findUnique({ where: { id } });\n if (!payment) return res.status(404).json({ error: 'Not found' });\n if (payment.status !== 'UNPROCESSED') {\n return res.status(409).json({ error: `Payment is already ${payment.status.toLowerCase()}` });\n }\n\n await sendNotification(payment);\n\n const updated = await prisma.payment.update({\n where: { id },\n data: { status: 'SENT', notifiedAt: new Date() },\n include: { tags: true },\n });\n\n res.json(updated);\n } catch (err) {\n console.error('Send error:', err);\n res.status(500).json({ error: 'Failed to send notification' });\n }\n});\n\n// ── Skip notification (mark as SKIPPED) ──────────────────────────────────────\nrouter.post('/:id/skip', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const payment = await prisma.payment.findUnique({ where: { id } });\n if (!payment) return res.status(404).json({ error: 'Not found' });\n if (payment.status !== 'UNPROCESSED') {\n return res.status(409).json({ error: `Payment is already ${payment.status.toLowerCase()}` });\n }\n\n const updated = await prisma.payment.update({\n where: { id },\n data: { status: 'SKIPPED' },\n include: { tags: true },\n });\n res.json(updated);\n } catch (err) {\n console.error('Skip error:', err);\n res.status(500).json({ error: 'Failed to skip payment' });\n }\n});\n\n// ── Add tag to payment ────────────────────────────────────────────────────────\nrouter.post('/:id/tags', async (req, res) => {\n const id = parseId(req.params.id);\n if (id === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const { name, color } = req.body;\n if (!name) return res.status(400).json({ error: 'tag name is required' });\n\n const tag = await prisma.tag.upsert({\n where: { name },\n update: {},\n create: { name, color: color || '#6b7280' },\n });\n\n const updated = await prisma.payment.update({\n where: { id },\n data: { tags: { connect: { id: tag.id } } },\n include: { tags: true },\n });\n\n res.json(updated);\n } catch (err) {\n console.error('Tag error:', err);\n res.status(500).json({ error: 'Failed to add tag' });\n }\n});\n\n// ── Remove tag from payment ───────────────────────────────────────────────────\nrouter.delete('/:id/tags/:tagId', async (req, res) => {\n const id = parseId(req.params.id);\n const tagId = parseId(req.params.tagId);\n if (id === null || tagId === null) return res.status(400).json({ error: 'Invalid id' });\n\n try {\n const updated = await prisma.payment.update({\n where: { id },\n data: { tags: { disconnect: { id: tagId } } },\n include: { tags: true },\n });\n res.json(updated);\n } catch (err) {\n console.error('Remove tag error:', err);\n res.status(500).json({ error: 'Failed to remove tag' });\n }\n});\n\nmodule.exports = router;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"upload.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"upload.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"89 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"const express = require('express');\nconst multer = require('multer');\nconst { PrismaClient } = require('@prisma/client');\nconst { parseDskCsv } = require('../csvParser');\n\nconst router = express.Router();\nconst prisma = new PrismaClient();\n\nconst upload = multer({\n storage: multer.memoryStorage(),\n limits: { fileSize: 10 * 1024 * 1024, files: 10 },\n fileFilter: (_req, file, cb) => {\n if (file.mimetype === 'text/csv' || file.originalname.toLowerCase().endsWith('.csv')) {\n cb(null, true);\n } else {\n cb(new Error('Only CSV files are accepted'));\n }\n },\n});\n\n// POST /api/upload/csv\n// Accepts 1-10 CSV files, parses them, stores to DB with source=UPLOAD.\n// Returns { imported, skipped, errors, payments[] }\nrouter.post('/csv', upload.array('files', 10), async (req, res) => {\n if (!req.files || req.files.length === 0) {\n return res.status(400).json({ error: 'No files uploaded' });\n }\n\n const allRows = [];\n const allErrors = [];\n let totalSkipped = 0;\n\n for (const file of req.files) {\n try {\n const { rows, skipped, errors } = await parseDskCsv(file.buffer);\n allRows.push(...rows);\n totalSkipped += skipped;\n allErrors.push(...errors.map(e => `${file.originalname}: ${e}`));\n } catch (err) {\n allErrors.push(`${file.originalname}: ${err.message}`);\n }\n }\n\n if (allRows.length === 0) {\n return res.status(422).json({\n error: 'No importable rows found',\n skipped: totalSkipped,\n errors: allErrors,\n });\n }\n\n const created = [];\n\n for (const row of allRows) {\n const { autoTags, ...paymentData } = row;\n try {\n const tagConnects = [];\n for (const tagName of autoTags) {\n const tag = await prisma.tag.upsert({\n where: { name: tagName },\n update: {},\n create: { name: tagName, color: '#6b7280' },\n });\n tagConnects.push({ id: tag.id });\n }\n\n const payment = await prisma.payment.create({\n data: {\n ...paymentData,\n ...(tagConnects.length ? { tags: { connect: tagConnects } } : {}),\n },\n include: { tags: true },\n });\n created.push(payment);\n } catch (err) {\n allErrors.push(`Row insert failed: ${err.message}`);\n }\n }\n\n res.status(201).json({\n imported: created.length,\n skipped: totalSkipped,\n errors: allErrors,\n payments: created,\n });\n});\n\nmodule.exports = router;","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Create folder structure and root config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend Prisma schema and migration","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend package.json and Dockerfile","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend src files (auth, parser, csvParser, index)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write backend routes (payments.js, upload.js)","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend config files","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write frontend React components","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Build and verify with docker compose","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now writing all frontend config files:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"package.json","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"package.json","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"24 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"{\n \"name\": \"finance-hub-frontend\",\n \"version\": \"1.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n },\n \"dependencies\": {\n \"lucide-react\": \"^0.460.0\",\n \"react\": \"^18.3.1\",\n \"react-dom\": \"^18.3.1\"\n },\n \"devDependencies\": {\n \"@types/react\": \"^18.3.12\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"autoprefixer\": \"^10.4.20\",\n \"postcss\": \"^8.4.49\",\n \"tailwindcss\": \"^3.4.15\",\n \"vite\": \"^6.0.1\"\n }\n}","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"13 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"FROM node:20-alpine\n\nWORKDIR /app\n\nCOPY package.json package-lock.json* ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 5173\n\nCMD [\"npm\", \"run\", \"dev\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"vite.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"vite.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"18 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [react()],\n server: {\n host: '0.0.0.0',\n port: 5173,\n allowedHosts: ['finance-hub.lakylak.xyz'],\n proxy: {\n '/api': {\n target: 'http://backend:3001',\n changeOrigin: true,\n },\n },\n },\n});","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"tailwind.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"tailwind.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"12 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/** @type {import('tailwindcss').Config} */\nexport default {\n content: [\n \"./index.html\",\n \"./src/**/*.{js,ts,jsx,tsx}\",\n ],\n theme: {\n extend: {},\n },\n plugins: [],\n};","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"postcss.config.js","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"postcss.config.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"7 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"14 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Finance Hub</title>\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>💰</text></svg>\" />\n </head>\n <body class=\"bg-gray-50 min-h-screen\">\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.jsx\"></script>\n </body>\n</html>","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"index.css","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.css","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"4 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"@tailwind base;\n@tailwind components;\n@tailwind utilities;","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Update Todos","depth":25,"on_screen":false,"role_description":"text"}]...
|
94934952627993
|
-8843470486912991841
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
reimport_sms.sh
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
.claude
auth
backend
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
Design new payment-logge…, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
expanded
Design new payment-logger and dsk-uploader hybrid app
Session history
New session
Message actions
payments.js
payments.js
ets create a new app that should be combination of payment-logger and dsk-uploader. It should have authorization via authentik (auth folder). All three folders (payment-logger, dsk-uploader and auth) are just refference these will be removed later. Auth project is separated it lives on its own. First reveiw them and see how these should be combined. It will be whole new app (also the folder name). Think very carefully of whatr these two apps do and how cold they be combined. THerer should be common db and uploader should store data the same way the /ingest does. It should be properly marked in UI if it is upload or ingest or both. FIrst think of tech stack and plan carefully.
Thinking
Thinking
I'll explore all three reference projects in parallel to understand their structure before planning.
Agent:
Explore payment-logger app structure and functionality
IN
Explore the /volume2/docker/finance/payments-logger directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How data flows (ingest, storage, retrieval)
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, and how data is ingested. Be thorough on the /ingest endpoint specifically.
Agent:
Explore dsk-uploader app structure and functionality
IN
Explore the /volume2/docker/finance/dsk-uploader directory thoroughly. I need to understand:
1. Tech stack (frontend framework, backend framework, database)
2. What the app does - its core purpose and features
3. Database schema - all tables, relationships
4. API routes - all endpoints, their purpose and request/response shapes
5. How file uploads work - what files, what format, how parsed
6. Any auth/middleware setup
7. Docker/deployment setup
8. Key files and their roles
Report with: directory structure, tech stack summary, database schema details, all API endpoints listed, UI features, how file upload parsing works, and what data is extracted from uploads. Be very thorough about th...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13327
|
590
|
8
|
2026-05-09T15:19:08.904752+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339948904_m2.jpg...
|
Code
|
sms_export.json — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.13168396,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.14924182,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.16679968,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.030917553,"top":0.18435754,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.20111732,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.2019154,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.21947326,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.23703113,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.254589,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.030917553,"top":0.27214685,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.28890663,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.28890663,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0625,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.17785904,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"bounds":{"left":0.21775267,"top":0.047885075,"width":0.046210106,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"bounds":{"left":0.26396278,"top":0.047885075,"width":0.046875,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.31050533,"top":0.047885075,"width":0.053523935,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14527926,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.19082446,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"bounds":{"left":0.19614361,"top":0.07821229,"width":0.003656915,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":28,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.37799203,"height":0.0007980846},"on_screen":true,"value":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":29,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.37799203,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"JSON","depth":16,"bounds":{"left":0.94980055,"top":0.98244214,"width":0.012965426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9424867,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9318484,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.91456115,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.890625,"top":0.98244214,"width":0.021941489,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 1, Col 1","depth":16,"bounds":{"left":0.8646942,"top":0.98244214,"width":0.023936171,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-4672842951396347045
|
-8843470486912991841
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
13326
|
NULL
|
NULL
|
NULL
|
|
13328
|
589
|
6
|
2026-05-09T15:19:08.961840+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339948961_m1.jpg...
|
Code
|
sms_export.json — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":28,"on_screen":true,"value":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"[\n {\n \"message\": \"DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.\",\n \"original_id\": 12,\n \"original_date\": \"2026-02-18T20:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.\",\n \"original_id\": 11,\n \"original_date\": \"2026-02-20T13:08:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.\",\n \"original_id\": 13,\n \"original_date\": \"2026-02-20T16:17:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.\",\n \"original_id\": 14,\n \"original_date\": \"2026-02-20T16:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.\",\n \"original_id\": 17,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.\",\n \"original_id\": 16,\n \"original_date\": \"2026-02-22T09:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.\",\n \"original_id\": 20,\n \"original_date\": \"2026-02-24T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.\",\n \"original_id\": 22,\n \"original_date\": \"2026-02-25T06:38:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.\",\n \"original_id\": 24,\n \"original_date\": \"2026-02-26T06:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.\",\n \"original_id\": 25,\n \"original_date\": \"2026-02-26T07:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.\",\n \"original_id\": 26,\n \"original_date\": \"2026-02-26T15:06:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.\",\n \"original_id\": 28,\n \"original_date\": \"2026-02-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.\",\n \"original_id\": 29,\n \"original_date\": \"2026-02-27T09:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.\",\n \"original_id\": 32,\n \"original_date\": \"2026-02-28T14:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.\",\n \"original_id\": 34,\n \"original_date\": \"2026-03-02T15:18:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.\",\n \"original_id\": 36,\n \"original_date\": \"2026-03-04T06:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.\",\n \"original_id\": 39,\n \"original_date\": \"2026-03-05T17:05:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.\",\n \"original_id\": 40,\n \"original_date\": \"2026-03-05T17:31:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.\",\n \"original_id\": 41,\n \"original_date\": \"2026-03-05T19:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.\",\n \"original_id\": 42,\n \"original_date\": \"2026-03-05T23:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.\",\n \"original_id\": 44,\n \"original_date\": \"2026-03-06T07:03:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.\",\n \"original_id\": 45,\n \"original_date\": \"2026-03-06T07:34:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.\",\n \"original_id\": 46,\n \"original_date\": \"2026-03-06T08:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.\",\n \"original_id\": 47,\n \"original_date\": \"2026-03-06T08:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.\",\n \"original_id\": 48,\n \"original_date\": \"2026-03-06T08:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.\",\n \"original_id\": 50,\n \"original_date\": \"2026-03-07T10:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.\",\n \"original_id\": 52,\n \"original_date\": \"2026-03-09T06:42:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.\",\n \"original_id\": 53,\n \"original_date\": \"2026-03-09T06:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.\",\n \"original_id\": 54,\n \"original_date\": \"2026-03-09T15:37:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.\",\n \"original_id\": 57,\n \"original_date\": \"2026-03-10T16:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.\",\n \"original_id\": 59,\n \"original_date\": \"2026-03-11T08:49:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.\",\n \"original_id\": 62,\n \"original_date\": \"2026-03-13T09:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.\",\n \"original_id\": 63,\n \"original_date\": \"2026-03-13T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.\",\n \"original_id\": 64,\n \"original_date\": \"2026-03-14T10:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.\",\n \"original_id\": 65,\n \"original_date\": \"2026-03-14T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.\",\n \"original_id\": 66,\n \"original_date\": \"2026-03-14T13:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.\",\n \"original_id\": 67,\n \"original_date\": \"2026-03-14T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.\",\n \"original_id\": 68,\n \"original_date\": \"2026-03-15T10:24:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.\",\n \"original_id\": 70,\n \"original_date\": \"2026-03-16T08:02:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.\",\n \"original_id\": 71,\n \"original_date\": \"2026-03-16T08:28:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.\",\n \"original_id\": 72,\n \"original_date\": \"2026-03-16T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.\",\n \"original_id\": 73,\n \"original_date\": \"2026-03-16T12:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.\",\n \"original_id\": 75,\n \"original_date\": \"2026-03-17T06:35:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.\",\n \"original_id\": 76,\n \"original_date\": \"2026-03-17T06:47:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.\",\n \"original_id\": 78,\n \"original_date\": \"2026-03-18T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.\",\n \"original_id\": 79,\n \"original_date\": \"2026-03-18T15:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.\",\n \"original_id\": 81,\n \"original_date\": \"2026-03-19T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.\",\n \"original_id\": 84,\n \"original_date\": \"2026-03-20T06:40:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.\",\n \"original_id\": 85,\n \"original_date\": \"2026-03-21T12:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.\",\n \"original_id\": 86,\n \"original_date\": \"2026-03-21T13:12:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.\",\n \"original_id\": 87,\n \"original_date\": \"2026-03-21T13:21:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.\",\n \"original_id\": 88,\n \"original_date\": \"2026-03-22T11:50:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.\",\n \"original_id\": 89,\n \"original_date\": \"2026-03-22T16:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.\",\n \"original_id\": 91,\n \"original_date\": \"2026-03-23T15:29:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.\",\n \"original_id\": 93,\n \"original_date\": \"2026-03-24T09:41:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.\",\n \"original_id\": 96,\n \"original_date\": \"2026-03-27T09:45:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.\",\n \"original_id\": 98,\n \"original_date\": \"2026-03-27T11:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.\",\n \"original_id\": 100,\n \"original_date\": \"2026-03-27T16:04:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.\",\n \"original_id\": 101,\n \"original_date\": \"2026-03-27T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.\",\n \"original_id\": 103,\n \"original_date\": \"2026-03-28T11:43:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.\",\n \"original_id\": 104,\n \"original_date\": \"2026-03-28T15:22:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.\",\n \"original_id\": 105,\n \"original_date\": \"2026-03-29T11:09:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.\",\n \"original_id\": 106,\n \"original_date\": \"2026-03-29T11:19:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.\",\n \"original_id\": 107,\n \"original_date\": \"2026-03-29T14:26:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.\",\n \"original_id\": 109,\n \"original_date\": \"2026-03-30T05:53:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.\",\n \"original_id\": 111,\n \"original_date\": \"2026-03-30T09:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.\",\n \"original_id\": 112,\n \"original_date\": \"2026-03-30T09:57:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.\",\n \"original_id\": 117,\n \"original_date\": \"2026-03-31T13:30:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.\",\n \"original_id\": 119,\n \"original_date\": \"2026-04-01T05:52:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.\",\n \"original_id\": 120,\n \"original_date\": \"2026-04-01T05:55:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.\",\n \"original_id\": 121,\n \"original_date\": \"2026-04-01T09:54:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.\",\n \"original_id\": 123,\n \"original_date\": \"2026-04-02T06:10:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.\",\n \"original_id\": 124,\n \"original_date\": \"2026-04-02T06:33:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.\",\n \"original_id\": 125,\n \"original_date\": \"2026-04-02T06:51:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.\",\n \"original_id\": 126,\n \"original_date\": \"2026-04-02T12:20:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.\",\n \"original_id\": 127,\n \"original_date\": \"2026-04-03T01:46:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.\",\n \"original_id\": 130,\n \"original_date\": \"2026-04-03T07:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.\",\n \"original_id\": 132,\n \"original_date\": \"2026-04-03T15:56:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.\",\n \"original_id\": 133,\n \"original_date\": \"2026-04-03T16:15:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.\",\n \"original_id\": 134,\n \"original_date\": \"2026-04-03T22:14:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.\",\n \"original_id\": 135,\n \"original_date\": \"2026-04-04T11:39:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.\",\n \"original_id\": 136,\n \"original_date\": \"2026-04-04T11:44:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {\n \"message\": \"DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.\",\n \"original_id\": 137,\n \"original_date\": \"2026-04-05T12:48:00.000Z\",\n \"original_status\": \"UNPROCESSED\"\n },\n {","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"JSON","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 1, Col 1","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-4672842951396347045
|
-8843470486912991841
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
backend
frontend
scripts
.env
.env.example
.gitignore
docker-compose.yml
sms_export.json
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
…
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
[
{
"message": "DSK Bank. Na 18/02/2026 v 20:38 sa plateni 4.19 EUR s karta 400915***4447 na POS s adres: BILLA 264 03, SOFIA, BG. Nalichni: 2782.53 EUR.",
"original_id": 12,
"original_date": "2026-02-18T20:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 13:08 sa plateni 13.75 EUR s karta 400915***4447 na POS s adres: FANTASTICO 43, SOFIA, BG. Nalichni: 2768.78 EUR.",
"original_id": 11,
"original_date": "2026-02-20T13:08:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:17 sa plateni 16.58 EUR s karta 400915***4447 na POS s adres: SANI - K 2019 EOOD, SOFIA, BG. Nalichni: 2752.20 EUR.",
"original_id": 13,
"original_date": "2026-02-20T16:17:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/02/2026 v 18:28 sa plateni 12.51 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2739.69 EUR.",
"original_id": 14,
"original_date": "2026-02-20T16:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: BULGARIA 104, SOFIA, BGR. Nalichni: 338.25 EUR.",
"original_id": 17,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/02/2026 v 11:05 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 337.75 EUR.",
"original_id": 16,
"original_date": "2026-02-22T09:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/02/2026 v 08:42 sa plateni 116.85 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2622.84 EUR.",
"original_id": 20,
"original_date": "2026-02-24T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 25/02/2026 v 08:38 sa plateni 78.01 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2544.83 EUR.",
"original_id": 22,
"original_date": "2026-02-25T06:38:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 08:39 sa plateni 59.65 EUR s karta 400915***4447 na POS s adres: LUKOIL-BULGARIA EOOD, GR. SOFIYA, BG. Nalichni: 2485.18 EUR.",
"original_id": 24,
"original_date": "2026-02-26T06:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 09:10 sa plateni 14.40 EUR s karta 400915***4447 na POS s adres: DIANA OOD, 1408 GR. SOF, BG. Nalichni: 2470.78 EUR.",
"original_id": 25,
"original_date": "2026-02-26T07:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 26/02/2026 v 17:06 sa plateni 6.63 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2464.15 EUR.",
"original_id": 26,
"original_date": "2026-02-26T15:06:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2461.34 EUR.",
"original_id": 28,
"original_date": "2026-02-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/02/2026 v 11:50 sa plateni 44.92 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2416.42 EUR.",
"original_id": 29,
"original_date": "2026-02-27T09:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/02/2026 v 16:57 sa plateni 19.40 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 2397.02 EUR.",
"original_id": 32,
"original_date": "2026-02-28T14:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/03/2026 v 17:18 sa plateni 132.99 EUR s karta 400915***4447 na POS s adres: PYN*keychron de, Online, HK. Nalichni: 2264.03 EUR.",
"original_id": 34,
"original_date": "2026-03-02T15:18:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/03/2026 v 08:56 sa plateni 7.94 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2256.09 EUR.",
"original_id": 36,
"original_date": "2026-03-04T06:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:05 sa plateni 85.00 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2171.09 EUR.",
"original_id": 39,
"original_date": "2026-03-05T17:05:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 19:31 sa plateni 13.08 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2158.01 EUR.",
"original_id": 40,
"original_date": "2026-03-05T17:31:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/03/2026 v 21:19 sa plateni 160.40 EUR s karta 400915***4447 na POS s adres: wizzair.com, Milan, IT. Nalichni: 1997.61 EUR.",
"original_id": 41,
"original_date": "2026-03-05T19:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 01:28 sa plateni 0.80 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 1996.81 EUR.",
"original_id": 42,
"original_date": "2026-03-05T23:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:03 sa plateni 20.20 EUR s karta 400915***4447 na POS s adres: TANDURI OOD, SOFIA, BG. Nalichni: 1976.61 EUR.",
"original_id": 44,
"original_date": "2026-03-06T07:03:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 09:34 sa plateni 258.51 EUR s karta 400915***4447 na POS s adres: OP VITOSHA, SOFIA, BG. Nalichni: 1718.10 EUR.",
"original_id": 45,
"original_date": "2026-03-06T07:34:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:20 sa plateni 1.50 EUR s karta 400915***4447 na POS s adres: DM BULGARIA EOOD, SOFIYA, BG. Nalichni: 1716.60 EUR.",
"original_id": 46,
"original_date": "2026-03-06T08:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:33 sa plateni 2.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 1713.61 EUR.",
"original_id": 47,
"original_date": "2026-03-06T08:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 06/03/2026 v 10:48 sa plateni 7.50 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 1706.11 EUR.",
"original_id": 48,
"original_date": "2026-03-06T08:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 07/03/2026 v 12:41 sa plateni 7.76 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2698.35 EUR.",
"original_id": 50,
"original_date": "2026-03-07T10:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:42 sa plateni 116.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.43 EUR.",
"original_id": 52,
"original_date": "2026-03-09T06:42:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 08:48 sa plateni 0.01 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2581.42 EUR.",
"original_id": 53,
"original_date": "2026-03-09T06:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 09/03/2026 v 17:37 sa plateni 4.24 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2577.18 EUR.",
"original_id": 54,
"original_date": "2026-03-09T15:37:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 10/03/2026 v 18:55 sa plateni 7.99 EUR s karta 400915***4447 na POS s adres: dennikn.sk, Bratislava, SK. Nalichni: 2569.19 EUR.",
"original_id": 57,
"original_date": "2026-03-10T16:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 11/03/2026 v 10:49 sa plateni 21.78 EUR s karta 400915***4447 na POS s adres: Temu.com, Dublin 4, IE. Nalichni: 2547.41 EUR.",
"original_id": 59,
"original_date": "2026-03-11T08:49:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 11:35 sa plateni 18.14 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2529.27 EUR.",
"original_id": 62,
"original_date": "2026-03-13T09:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 13/03/2026 v 17:56 sa plateni 7.30 EUR s karta 400915***4447 na POS s adres: VIMARD EOOD, SOFIA, BG. Nalichni: 2521.97 EUR.",
"original_id": 63,
"original_date": "2026-03-13T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 12:55 sa plateni 5.12 EUR s karta 400915***4447 na POS s adres: NATSIONALEN ISTORICHESK, SOFIYA, BG. Nalichni: 2516.85 EUR.",
"original_id": 64,
"original_date": "2026-03-14T10:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 14:20 sa plateni 21.60 EUR s karta 400915***4447 na POS s adres: CLAUDE.AI SUBSCRIPTION, 14152360599, US. Nalichni: 2495.25 EUR.",
"original_id": 65,
"original_date": "2026-03-14T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:20 sa plateni 10.97 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2484.28 EUR.",
"original_id": 66,
"original_date": "2026-03-14T13:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 14/03/2026 v 15:30 sa plateni 9.89 EUR s karta 400915***4447 na POS s adres: Boosteroid, Bucharest, RO. Nalichni: 2474.39 EUR.",
"original_id": 67,
"original_date": "2026-03-14T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 15/03/2026 v 12:24 sa plateni 18.13 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2456.26 EUR.",
"original_id": 68,
"original_date": "2026-03-15T10:24:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:02 sa plateni 18.19 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2438.07 EUR.",
"original_id": 70,
"original_date": "2026-03-16T08:02:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 10:28 sa plateni 1.90 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2436.17 EUR.",
"original_id": 71,
"original_date": "2026-03-16T08:28:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 13:44 sa plateni 31.48 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2404.69 EUR.",
"original_id": 72,
"original_date": "2026-03-16T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 16/03/2026 v 14:40 sa plateni 43.91 EUR s karta 400915***4447 na POS s adres: VIVACOM, SOFIA, BG. Nalichni: 2360.78 EUR.",
"original_id": 73,
"original_date": "2026-03-16T12:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:35 sa plateni 44.23 EUR s karta 400915***4447 na POS s adres: REMEDIKOR EOOD, SOFIYA, BG. Nalichni: 2316.55 EUR.",
"original_id": 75,
"original_date": "2026-03-17T06:35:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 17/03/2026 v 08:47 sa plateni 4.23 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2312.32 EUR.",
"original_id": 76,
"original_date": "2026-03-17T06:47:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 08:33 sa plateni 6.43 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2305.89 EUR.",
"original_id": 78,
"original_date": "2026-03-18T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 18/03/2026 v 17:30 sa plateni 3.96 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2301.93 EUR.",
"original_id": 79,
"original_date": "2026-03-18T15:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 19/03/2026 v 08:51 sa plateni 4.33 EUR s karta 400915***4447 na POS s adres: KAM 2014 EOOD, SOFIYA, BG. Nalichni: 2297.60 EUR.",
"original_id": 81,
"original_date": "2026-03-19T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 20/03/2026 v 08:40 sa plateni 5.05 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2692.55 EUR.",
"original_id": 84,
"original_date": "2026-03-20T06:40:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 14:22 sa plateni 4.49 EUR s karta 400915***4447 na POS s adres: Sinsay, Sofia, BG. Nalichni: 2688.06 EUR.",
"original_id": 85,
"original_date": "2026-03-21T12:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:12 sa plateni 102.16 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2585.90 EUR.",
"original_id": 86,
"original_date": "2026-03-21T13:12:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 21/03/2026 v 15:21 sa plateni 7.81 EUR s karta 400915***4447 na POS s adres: SOPHARMACY, SOFIYA, BGR. Nalichni: 2578.09 EUR.",
"original_id": 87,
"original_date": "2026-03-21T13:21:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 13:50 sa plateni 3.28 EUR s karta 400915***4447 na POS s adres: FANTASTICO GROUP LTD, SOFIA, BG. Nalichni: 2574.81 EUR.",
"original_id": 88,
"original_date": "2026-03-22T11:50:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 22/03/2026 v 18:26 sa plateni 5.43 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2569.38 EUR.",
"original_id": 89,
"original_date": "2026-03-22T16:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 23/03/2026 v 17:29 sa plateni 4.45 EUR s karta 400915***4447 na POS s adres: HS, SOFIYA, BGR. Nalichni: 2564.93 EUR.",
"original_id": 91,
"original_date": "2026-03-23T15:29:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 24/03/2026 v 11:41 sa plateni 7.96 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2556.97 EUR.",
"original_id": 93,
"original_date": "2026-03-24T09:41:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 11:45 sa plateni 2.81 EUR s karta 400915***4447 na POS s adres: Google One, Dublin, IE. Nalichni: 2529.49 EUR.",
"original_id": 96,
"original_date": "2026-03-27T09:45:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 13:53 sa plateni 1.58 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2527.91 EUR.",
"original_id": 98,
"original_date": "2026-03-27T11:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:04 sa plateni 12.95 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2514.96 EUR.",
"original_id": 100,
"original_date": "2026-03-27T16:04:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 27/03/2026 v 18:15 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CBA ECO MARKET, SOFIA, BG. Nalichni: 2513.36 EUR.",
"original_id": 101,
"original_date": "2026-03-27T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 13:43 sa plateni 1.92 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2511.44 EUR.",
"original_id": 103,
"original_date": "2026-03-28T11:43:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 28/03/2026 v 17:22 sa plateni 11.50 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2499.94 EUR.",
"original_id": 104,
"original_date": "2026-03-28T15:22:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:09 sa plateni 1.57 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2498.37 EUR.",
"original_id": 105,
"original_date": "2026-03-29T11:09:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 14:19 sa plateni 0.86 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2497.51 EUR.",
"original_id": 106,
"original_date": "2026-03-29T11:19:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 29/03/2026 v 17:26 sa plateni 10.64 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2486.87 EUR.",
"original_id": 107,
"original_date": "2026-03-29T14:26:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 08:53 sa plateni 9.59 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2477.28 EUR.",
"original_id": 109,
"original_date": "2026-03-30T05:53:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:56 sa iztegleni 400.00 EUR s karta 483890***7162 ot ATM s adres: PIRIN 52, SOFIA, BGR. Nalichni: 26760.09 EUR.",
"original_id": 111,
"original_date": "2026-03-30T09:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 30/03/2026 v 12:57 sa plateni 0.50 EUR/0.50 EUR s karta 483890***7162 na ATM s adres:Utility payments on ATM, SOFIA, BGR. Nalichni: 26759.59 EUR.",
"original_id": 112,
"original_date": "2026-03-30T09:57:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 31/03/2026 v 16:30 sa plateni 68.19 EUR s karta 400915***4447 na POS s adres: ECONT EXPRESS AD, RUSE, BG. Nalichni: 2409.09 EUR.",
"original_id": 117,
"original_date": "2026-03-31T13:30:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:52 sa plateni 86.34 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.75 EUR.",
"original_id": 119,
"original_date": "2026-04-01T05:52:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 08:55 sa plateni 0.02 EUR s karta 400915***4447 na POS s adres: LIDL BALGARIYA EOOD, SOFIYA, BGR. Nalichni: 2322.73 EUR.",
"original_id": 120,
"original_date": "2026-04-01T05:55:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 01/04/2026 v 12:54 sa plateni 8.59 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2314.14 EUR.",
"original_id": 121,
"original_date": "2026-04-01T09:54:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:10 sa plateni 7.57 EUR s karta 400915***4447 na POS s adres: KAUFLAND BULGARIA, SOFIYA, BG. Nalichni: 2306.57 EUR.",
"original_id": 123,
"original_date": "2026-04-02T06:10:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:33 sa plateni 16.37 EUR s karta 400915***4447 na POS s adres: BRV LILLY DR BOROVO, Sofia, BG. Nalichni: 2290.20 EUR.",
"original_id": 124,
"original_date": "2026-04-02T06:33:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 09:51 sa plateni 0.99 EUR s karta 400915***4447 na POS s adres: EUROLEND EOOD, 1360 GR SOFI, BG. Nalichni: 2289.21 EUR.",
"original_id": 125,
"original_date": "2026-04-02T06:51:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 02/04/2026 v 15:20 sa plateni 9.08 EUR s karta 400915***4447 na POS s adres: IVEO EOOD, SOFIA, BG. Nalichni: 2280.13 EUR.",
"original_id": 126,
"original_date": "2026-04-02T12:20:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 04:46 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2278.53 EUR.",
"original_id": 127,
"original_date": "2026-04-03T01:46:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 10:48 sa plateni 6.27 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2272.26 EUR.",
"original_id": 130,
"original_date": "2026-04-03T07:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 18:56 sa plateni 21.17 EUR s karta 400915***4447 na POS s adres: VIADENTAL, SOFIA, BG. Nalichni: 2251.09 EUR.",
"original_id": 132,
"original_date": "2026-04-03T15:56:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 03/04/2026 v 19:15 sa plateni 3.89 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2247.20 EUR.",
"original_id": 133,
"original_date": "2026-04-03T16:15:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 01:14 sa plateni 1.60 EUR s karta 400915***4447 na POS s adres: CityGate Sofia Transit, SOFIA, BGR. Nalichni: 2245.60 EUR.",
"original_id": 134,
"original_date": "2026-04-03T22:14:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:39 sa plateni 3.57 EUR s karta 400915***4447 na POS s adres: CBA EKO MARKET, SOFIA, BG. Nalichni: 2242.03 EUR.",
"original_id": 135,
"original_date": "2026-04-04T11:39:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 04/04/2026 v 14:44 sa plateni 2.04 EUR s karta 400915***4447 na POS s adres: KIK TEKSTILIEN NON-FUUD, SOFIYA, BG. Nalichni: 2239.99 EUR.",
"original_id": 136,
"original_date": "2026-04-04T11:44:00.000Z",
"original_status": "UNPROCESSED"
},
{
"message": "DSK Bank. Na 05/04/2026 v 15:48 sa plateni 2.55 EUR s karta 400915***4447 na POS s adres: BEYKARS OOD, SOFIYA, 1000, BG. Nalichni: 2237.44 EUR.",
"original_id": 137,
"original_date": "2026-04-05T12:48:00.000Z",
"original_status": "UNPROCESSED"
},
{
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JSON
Editor Language Status: No schema validation, no JSON schema configured, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 1, Col 1
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
13324
|
NULL
|
NULL
|
NULL
|
|
22251
|
967
|
25
|
2026-05-12T06:57:33.482076+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778569053482_m2.jpg...
|
Firefox
|
simonw/llm-prices: Prices of various LLMs — Work
|
True
|
github.com/simonw/llm-prices
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show thinking
Gemini said
Gemini said
Here is a summary of the changes in the provided code diff:
AI Call Scoring Additions
AI Call Scoring Additions
Pre-computed Scores:
Added strict instructions to treat the
ai_call_score
as pre-computed data. The system must interpret and summarize the provided scores rather than inventing or recalculating them.
Context Breakdown:
*
Short Context:
Now displays the
AI Scorecard
name and the overall
AI Score
(the average of per-rule scores).
Full Context:
Details the
ai_call_score
object, breaking down individual rules. Each rule includes a title, prompt, a 1–5 score, a brief justification, and up to three timestamped speaker references (MM:SS).
Application Rules:
Instructs the system to use these scores for coaching summaries, trends, and comparisons, but dictates that it must still rely on the actual transcript for direct quotes.
Grammar and Formatting Cleanup
Grammar and Formatting Cleanup
Typo Corrections:
Fixed minor grammatical errors, such as changing "contexts" to "context" and "utlizes" to "utilizes".
String Formatting:
Cleaned up the markdown link instructions by removing trailing newline and quotation artifacts (
\n"
) from the text strings.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said are there some issues and bottlenecks
You said
are there some issues and bottlenecks...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.24335106,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.25664893,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.09577015,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.12849163,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.16121309,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.22665602,"width":0.04537899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.25937748,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.29209897,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.32482043,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.24335106,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.25664893,"top":0.3575419,"width":0.40475398,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.24335106,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.25664893,"top":0.39026338,"width":0.40475398,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.42298484,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":4,"bounds":{"left":0.24335106,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":5,"bounds":{"left":0.25664893,"top":0.4557063,"width":0.15641622,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"simonw/llm-prices: Prices of various LLMs","depth":4,"bounds":{"left":0.24335106,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"simonw/llm-prices: Prices of various LLMs","depth":5,"bounds":{"left":0.25664893,"top":0.4884278,"width":0.0731383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.31067154,"top":0.48443735,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.24617687,"top":0.51157224,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.24617687,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.2571476,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.2682846,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.27942154,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.29055852,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.42802528,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.43999335,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.43733376,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.32696143,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.40940824,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.42270613,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.3226396,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.3226396,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\\n\\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\\n\\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a summary of the changes in the provided code diff:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"AI Call Scoring Additions","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Call Scoring Additions","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pre-computed Scores:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added strict instructions to treat the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_call_score","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"as pre-computed data. The system must interpret and summarize the provided scores rather than inventing or recalculating them.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Context Breakdown:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short Context:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Now displays the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Scorecard","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"name and the overall","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Score","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(the average of per-rule scores).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Full Context:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Details the","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_call_score","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object, breaking down individual rules. Each rule includes a title, prompt, a 1–5 score, a brief justification, and up to three timestamped speaker references (MM:SS).","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Application Rules:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instructs the system to use these scores for coaching summaries, trends, and comparisons, but dictates that it must still rely on the actual transcript for direct quotes.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Grammar and Formatting Cleanup","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grammar and Formatting Cleanup","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Typo Corrections:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fixed minor grammatical errors, such as changing \"contexts\" to \"context\" and \"utlizes\" to \"utilizes\".","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"String Formatting:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cleaned up the markdown link instructions by removing trailing newline and quotation artifacts (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\n\"","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") from the text strings.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.32962102,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.3402593,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.3508976,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.3615359,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.3721742,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.34557846,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.36020613,"top":0.0,"width":0.013297873,"height":0.031923383},"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there some issues and bottlenecks","depth":21,"bounds":{"left":0.3801529,"top":0.0,"width":0.065159574,"height":0.03830806},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.3226396,"top":0.0,"width":0.019946808,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there some issues and bottlenecks","depth":23,"bounds":{"left":0.3801529,"top":0.0,"width":0.06333112,"height":0.035514764},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
7798673010146480434
|
-2831912997542446190
|
visual_change
|
accessibility
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show thinking
Gemini said
Gemini said
Here is a summary of the changes in the provided code diff:
AI Call Scoring Additions
AI Call Scoring Additions
Pre-computed Scores:
Added strict instructions to treat the
ai_call_score
as pre-computed data. The system must interpret and summarize the provided scores rather than inventing or recalculating them.
Context Breakdown:
*
Short Context:
Now displays the
AI Scorecard
name and the overall
AI Score
(the average of per-rule scores).
Full Context:
Details the
ai_call_score
object, breaking down individual rules. Each rule includes a title, prompt, a 1–5 score, a brief justification, and up to three timestamped speaker references (MM:SS).
Application Rules:
Instructs the system to use these scores for coaching summaries, trends, and comparisons, but dictates that it must still rely on the actual transcript for direct quotes.
Grammar and Formatting Cleanup
Grammar and Formatting Cleanup
Typo Corrections:
Fixed minor grammatical errors, such as changing "contexts" to "context" and "utlizes" to "utilizes".
String Formatting:
Cleaned up the markdown link instructions by removing trailing newline and quotation artifacts (
\n"
) from the text strings.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said are there some issues and bottlenecks
You said
are there some issues and bottlenecks...
|
22249
|
NULL
|
NULL
|
NULL
|
|
22252
|
966
|
48
|
2026-05-12T06:57:33.952878+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778569053952_m1.jpg...
|
Firefox
|
simonw/llm-prices: Prices of various LLMs — Work
|
True
|
github.com/simonw/llm-prices
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"simonw/llm-prices: Prices of various LLMs","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"simonw/llm-prices: Prices of various LLMs","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.019097222,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04236111,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\\n\\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\\n\\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
1744580404937038437
|
-2831912997542446190
|
visual_change
|
accessibility
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand...
|
22250
|
NULL
|
NULL
|
NULL
|
|
22253
|
967
|
26
|
2026-05-12T06:57:36.488897+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778569056488_m2.jpg...
|
Firefox
|
simonw/llm-prices: Prices of various LLMs — Work
|
True
|
github.com/simonw/llm-prices
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show thinking
Gemini said
Gemini said
Here is a summary of the changes in the provided code diff:
AI Call Scoring Additions
AI Call Scoring Additions
Pre-computed Scores:
Added strict instructions to treat the
ai_call_score
as pre-computed data. The system must interpret and summarize the provided scores rather than inventing or recalculating them.
Context Breakdown:
*
Short Context:
Now displays the
AI Scorecard
name and the overall
AI Score
(the average of per-rule scores).
Full Context:
Details the
ai_call_score
object, breaking down individual rules. Each rule includes a title, prompt, a 1–5 score, a brief justification, and up to three timestamped speaker references (MM:SS).
Application Rules:
Instructs the system to use these scores for coaching summaries, trends, and comparisons, but dictates that it must still rely on the actual transcript for direct quotes....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.24335106,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.25664893,"top":0.06304868,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.09577015,"width":0.16888298,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.12849163,"width":0.16140293,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.16121309,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.22665602,"width":0.04537899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.25937748,"width":0.1200133,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"bounds":{"left":0.24335106,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"bounds":{"left":0.25664893,"top":0.29209897,"width":0.19331782,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.32482043,"width":0.07646277,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.24335106,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.25664893,"top":0.3575419,"width":0.40475398,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"bounds":{"left":0.24335106,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"bounds":{"left":0.25664893,"top":0.39026338,"width":0.40475398,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.24335106,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.25664893,"top":0.42298484,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":4,"bounds":{"left":0.24335106,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":5,"bounds":{"left":0.25664893,"top":0.4557063,"width":0.15641622,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"simonw/llm-prices: Prices of various LLMs","depth":4,"bounds":{"left":0.24335106,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"simonw/llm-prices: Prices of various LLMs","depth":5,"bounds":{"left":0.25664893,"top":0.4884278,"width":0.0731383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.31067154,"top":0.48443735,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.24617687,"top":0.51157224,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.24617687,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.2571476,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.2682846,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.27942154,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.29055852,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.42802528,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.43999335,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.43733376,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.32696143,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.40940824,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.42270613,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.3226396,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.3226396,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\\n\\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\\n\\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a summary of the changes in the provided code diff:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"AI Call Scoring Additions","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Call Scoring Additions","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pre-computed Scores:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added strict instructions to treat the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_call_score","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"as pre-computed data. The system must interpret and summarize the provided scores rather than inventing or recalculating them.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Context Breakdown:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Short Context:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Now displays the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Scorecard","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"name and the overall","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Score","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(the average of per-rule scores).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Full Context:","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Details the","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ai_call_score","depth":29,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object, breaking down individual rules. Each rule includes a title, prompt, a 1–5 score, a brief justification, and up to three timestamped speaker references (MM:SS).","depth":28,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Application Rules:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instructs the system to use these scores for coaching summaries, trends, and comparisons, but dictates that it must still rely on the actual transcript for direct quotes.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4354826900359226924
|
-2831912997274010730
|
visual_change
|
accessibility
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20361: Add call scores in Panorama by steliyan-</tabTitle>” with “<selection>@@ -4,7 +4,7 @@ Today is {date_today}.445System instructions:5System instructions:6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.6- You must answer using markdown. Do not use html tags in your response even if requested by the user's question.7-- The contexts includes data for call shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.7+- The context includes data for calls shortlisted through user-applied filters. Note that the calls might not relate to the same deal or not even be by the same sales rep.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.8 - The full call context includes all calls data available while the short call context contains only an overview of the calls that are analysed. Refer to the short call context for quick reference and to see the overall picture.9- The calls are ordered in chronological order. 9- The calls are ordered in chronological order. 10- Here’s how to use the call context:10- Here’s how to use the call context:@@ -16,6 +16,15 @@ System instructions:16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.16 - Frame answers with awareness of the company’s ICP, deal cycle, and sales motion.17 - Evaluate statements or objections based on how the team operates and what success looks like.17 - Evaluate statements or objections based on how the team operates and what success looks like.18 - Position responses in light of known competitors and market dynamics.18 - Position responses in light of known competitors and market dynamics.19+ - AI call score (`ai_call_score` in the full call JSON): When present, treat it as **pre-computed** output from your team’s AI call-scoring pipeline (the same kind of scoring as the `/call/ai-call-scoring` endpoint). **Do not** invent, override, or recalculate scores; interpret and summarize what is given.20+ - **Short call context:** **AI Scorecard** is the name of the scorecard applied to that call; **AI Score** is the **overall** score for that scorecard (the average of its per-rule scores, possibly shown as a decimal).21+ - **Full call context:** The `ai_call_score` object may include `ai_scorecard_name`, `score` (overall for that scorecard), and `ai_scorecard_rules`. For each rule when listed:22+ - `rule_name`: Title of the criterion.23+ - `rule_prompt`: The criterion text that was evaluated.24+ - `score`: Whole number **1–5** measuring how well the call satisfied that criterion against `rule_prompt` (1 = no evidence / not discussed or contrary; 5 = strong, clear evidence on the call).25+ - `justification`: Short rationale grounded in what happened on the call.26+ - `justification_timestamps`: Up to three entries with speaker **name** and **timestamp** (MM:SS in the recording) highlighting where the justification is supported.27+ - Use scores for coaching summaries, trends across calls, or quick comparisons when relevant. For **what was actually said**, still rely on the **transcript** (you may cross-reference rule timestamps when helpful).19- Use the Message History to:28- Use the Message History to:20 - Maintain continuity if the current question refers to previous exchanges.29 - Maintain continuity if the current question refers to previous exchanges.21 - Clarify or resolve ambiguities if the question depends on prior messages.30 - Clarify or resolve ambiguities if the question depends on prior messages.@@ -28,10 +37,10 @@ System instructions:28 - All factual claims must be supported by one or more references to relevant calls.37 - All factual claims must be supported by one or more references to relevant calls.29 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.38 - Use Markdown link syntax ([link text](URL)) and place links inline within sentences. Do not use footnotes, reference sections, or bare URLs. Integrate the reference links directly within the relevant parts of your response, rather than in a separate section.30 - Use markdown links in the format [link text](/playback/{{call_id}})39 - Use markdown links in the format [link text](/playback/{{call_id}})31- - Use descriptive link that utlizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.\n"40+ - Use descriptive link text that utilizes the call name. Do not use call time stamps in the link text even if the link itself contains a time stamp, e.g. use 'Call Name' instead of 'Call Name at 10:00'. Never use call ids as link text.32- - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)\n"41+ - Good example of link text: [Call Name](/playback/1234567890?apFrom=123)33- - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)\n"42+ - Bad example of link text: [Call Name at 12:34](/playback/1234567890?apFrom=123) (do not use call time stamps in the link text)34- - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)\n\n"43+ - Bad example of links: [Call Name on November 12, 2025](/playback/1234567890?apFrom=123) (do not use dates in the link text)35 - You might back your statements with examples from the provided call transcripts in addition to the reference links.44 - You might back your statements with examples from the provided call transcripts in addition to the reference links.36- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.45- Be specific. Use names of accounts, clients and persons involved. Don't just say "one client" or "a client"! If no account is available, use the call title as a reference.37- If the question or context is unclear, request clarification or highlight ambiguities.46- If the question or context is unclear, request clarification or highlight ambiguities.</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Show thinking
Gemini said
Gemini said
Here is a summary of the changes in the provided code diff:
AI Call Scoring Additions
AI Call Scoring Additions
Pre-computed Scores:
Added strict instructions to treat the
ai_call_score
as pre-computed data. The system must interpret and summarize the provided scores rather than inventing or recalculating them.
Context Breakdown:
*
Short Context:
Now displays the
AI Scorecard
name and the overall
AI Score
(the average of per-rule scores).
Full Context:
Details the
ai_call_score
object, breaking down individual rules. Each rule includes a title, prompt, a 1–5 score, a brief justification, and up to three timestamped speaker references (MM:SS).
Application Rules:
Instructs the system to use these scores for coaching summaries, trends, and comparisons, but dictates that it must still rely on the actual transcript for direct quotes....
|
NULL
|
NULL
|
NULL
|
NULL
|
|
22254
|
966
|
49
|
2026-05-12T06:57:36.972385+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778569056972_m1.jpg...
|
Firefox
|
simonw/llm-prices: Prices of various LLMs — Work
|
True
|
github.com/simonw/llm-prices
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20773] User Pilot not receiving events on report generated - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20776] Automated report - sentry - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20776] Automated report - sentry - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TypeError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"simonw/llm-prices: Prices of various LLMs","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"simonw/llm-prices: Prices of various LLMs","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.019097222,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04236111,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
3047398199320432163
|
-2876302404507452794
|
visual_change
|
accessibility
|
NULL
|
New Tab
New Tab
Jy 20820 es reindex stream model h New Tab
New Tab
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
Jy 20820 es reindex stream model hydration by Vasil-Jiminny · Pull Request #12059 · jiminny/app
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
[JY-20725] [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Pull requests · jiminny/app
Pull requests · jiminny/app
[JY-20773] User Pilot not receiving events on report generated - Jira
[JY-20773] User Pilot not receiving events on report generated - Jira
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
JY-20773 fix user pilot tracking ofr automated report generated by LakyLak · Pull Request #12024 · jiminny/app
[JY-20776] Automated report - sentry - Jira
[JY-20776] Automated report - sentry - Jira
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
TypeError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218 — jiminny — app
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 3 Q2 - Platform Team - Scrum Board - Jira
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
JY-20361: Add call scores in Panorama by steliyan-g · Pull Request #507 · jiminny/prophet
simonw/llm-prices: Prices of various LLMs
simonw/llm-prices: Prices of various LLMs
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
22255
|
966
|
50
|
2026-05-12T06:57:42.723399+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778569062723_m1.jpg...
|
Firefox
|
simonw/llm-prices: Prices of various LLMs — Work
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp(allDaily - Platform • 8 m left)100% <2Tue 12 May 9:57:42meet.google.com/mie-gawc-dsi?authuser=lukas.kovalik%40jiminny.comNikolay Yankov (Presenting, annotating)ChromeFileViewHistory1 SeProfilesTabWindowHelpPrNnry4 AtAt:https://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37© AWS|X) SSH• Home | Salesforce |Platform TeamQ Search board•.Epic vType vQuick filters vREADY FOR DEVINDEV 3CODE REVIEW 2BLOCKEDUpgrade to PHP 8.5PHP 8.5 UPGRADEIn Dev3 П •••=AJ Panorama forCall Scoring in ODAUTOMATED AI SCORINGCode Review2.5 1 =E JY-18091|[ JY-20361|SAI Review - Q1 -Summary/Actionitems/Key PointsGROWTH - MAINTAIN OU...In Dev20.000=(HubSpot] OptimiseCRM rematching ondelete hubspot….PLATFORM STABILITYCode Review[ JY-20566XỐ JY-20725[POC)Jiminny MCPConnectorJIMINNY MCP CONNECTORIn Progress+ Create10 1 •.••=@JY-20625*JinClС мс3 мс$8• Tue 12 May 9:57Jin8 Jie1[л|+Datadog* Claude|3 CircleciSentryD All BookmarksComplete sprintGroup: Queries|QA 2PO ACCEPTANCEDEPLOY 9Smart Instant|Nudge Pre-filteringCOST-EFFECTIVE AND FA...Ready for QA|15 П =AI Reports > Emptypage design andpromotionAJ REPORTSDeployed1 П [PASSWORD_DOTS]=[ JY-20493|Д JY-20372Sync opportunitieswithout a localowner (user_id is..PLATFORM STABILITYIn QAn9 JY-20352Grok via AzureMAINTENANCEDeployed• •••.=Д JY-20726:meet.google.comNikolay Yankov (You, presenti..+7Galya DimitrovaNikolay Nikolov9Stefka Stoyanova4 others9:57 AM | Daily - PlatformLukas Kovalik11:49...
|
NULL
|
2139959705048684261
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp(allDaily - Platform • 8 m left)100% <2Tue 12 May 9:57:42meet.google.com/mie-gawc-dsi?authuser=lukas.kovalik%40jiminny.comNikolay Yankov (Presenting, annotating)ChromeFileViewHistory1 SeProfilesTabWindowHelpPrNnry4 AtAt:https://jiminny.atlassian.net/jira/software/c/projects/JY/boards/37© AWS|X) SSH• Home | Salesforce |Platform TeamQ Search board•.Epic vType vQuick filters vREADY FOR DEVINDEV 3CODE REVIEW 2BLOCKEDUpgrade to PHP 8.5PHP 8.5 UPGRADEIn Dev3 П •••=AJ Panorama forCall Scoring in ODAUTOMATED AI SCORINGCode Review2.5 1 =E JY-18091|[ JY-20361|SAI Review - Q1 -Summary/Actionitems/Key PointsGROWTH - MAINTAIN OU...In Dev20.000=(HubSpot] OptimiseCRM rematching ondelete hubspot….PLATFORM STABILITYCode Review[ JY-20566XỐ JY-20725[POC)Jiminny MCPConnectorJIMINNY MCP CONNECTORIn Progress+ Create10 1 •.••=@JY-20625*JinClС мс3 мс$8• Tue 12 May 9:57Jin8 Jie1[л|+Datadog* Claude|3 CircleciSentryD All BookmarksComplete sprintGroup: Queries|QA 2PO ACCEPTANCEDEPLOY 9Smart Instant|Nudge Pre-filteringCOST-EFFECTIVE AND FA...Ready for QA|15 П =AI Reports > Emptypage design andpromotionAJ REPORTSDeployed1 П [PASSWORD_DOTS]=[ JY-20493|Д JY-20372Sync opportunitieswithout a localowner (user_id is..PLATFORM STABILITYIn QAn9 JY-20352Grok via AzureMAINTENANCEDeployed• •••.=Д JY-20726:meet.google.comNikolay Yankov (You, presenti..+7Galya DimitrovaNikolay Nikolov9Stefka Stoyanova4 others9:57 AM | Daily - PlatformLukas Kovalik11:49...
|
22254
|
NULL
|
NULL
|
NULL
|
|
22256
|
967
|
27
|
2026-05-12T06:57:42.699753+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778569062699_m2.jpg...
|
Firefox
|
simonw/llm-prices: Prices of various LLMs — Work
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
HomeActivityFllesLaterMoreFirefoxMIStoMJiminny... HomeActivityFllesLaterMoreFirefoxMIStoMJiminny... ~# curiosity lab# engineering# general# jiminny-bg# platform-tickets# product launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...^? Direct messages. Galya Dimitrova MA. Aneliya Angelova @f Petko Kashinski@ Stefka Stoyanova€. Vasil VasilevCP. Nikolay Ivanov(3) Aneliva Angelova…Stoyan Tanev. Vese. Lukas Kovali... M o::: Apps& Toast4" Jira Cloud(m) Google Cale...© BadKeywordsQueryExcer( ConfiqurationExceotion.o© CrmException.php-crmUndateSycention.ohr© DatabaseException.phpE DealRisksEycention.nhn© DomainException.phpC EmailActivitvimnortEycen© ErrorDownloadingEmptyF) ErrorDownloadina Sile Syci© FileNotFoundException.pl© FileSystemException.php© Handler.php(@ HttnRodDoauoctEycontinA HttnRaNDebookmarksProtllesToolsWindow& # engineering• Messages©Canvas20260507)Help8 24e FilesMoreatecfix/npm-circlec APP 9-10 ANO 2 PRs with v Pnerability fixes are ready forreviewPlease take a look at the code and confirmthat everything works properly on yourlocal machine or on a planet environmentPull requests (jiminny/app)• 412049 hx cecurimv: comnoserdependency updates - 2026-05-07(secfix/composer-20260507)• #12048 fix(security): npm dependencyupdates - 2026-05-07 (secfix/npm-20260507)llan Kvuchukov 9.50AMClaude's limits are getang ridiculous. whatare you using from OpenAI? GPT-5.3Codey?e A 5 replies Last reply todayat 9-5...Message #engineering+ Aatroller.onpSautomatNew Tabe Jy 20820 es reindex stream mode[UY-20725] [HubSpot] Optimise CF@ JY-20725 add HS rate limit handlilO'Pipelines - jiminny/app• Pull requests • jiminny/appWY-207731 User Pilot not receivin@JY-20773 fix user pilot tracking ofrNY-20776 Automated report - seTypeError: LeaguelFlysystem|FilesA TypeError: League\Flysystem|FilesPlatform Sprint 3 02 - Platform TeJY-20361: Add call scores in P. Xsimonw/lim-prices: Prices of va X+ New Tab© github.com/simc~ Google Geminiintroduced by these additions. When you ask aLarge Language Model (LLM) to juggle largetranscripts alongside complex JsON scoringobjects, it creates specific friction points.Here is a breakdown of the potential issues andbottlenecks based on the changes:1. Token Consumption and Context Bloat(Bottleneck)• Massive Payload Size: By injecting thefull ai_call_score object into thecontext (which includes rule names,prompts, scores, text justifications, andup to three timestamps per rule), thetoken count per call will skyrocket.• Context Window Limits: The promptstates: "The full call context includes allcalls data available..." If a user filters for 5or 10 calls, injecting the transcripts plusthese extensive Al scoring arrays couldeasily hit the model's maximum contextwindow, leading to truncated data ordegraded recall (the "lost in the middle"effect).? 11 M Inctruction Conflicte (Iccme)• Pre-computed vs. Raw Transcript: Theprompt explicitly instructs the model: "Donot invent, override, or recalculatescores" but later says, "For what was• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improveJlrcan mite micnkes colcolliale chocktYottr orivaevdoSummarize pagea<40 hil © I Daily - Platform - 8mleft A 100% C/7 &• Tue 12 May 9:57:42OO READMEExample:"orices":"id": "amazon-nova-lite","vendor":amazon","name": "Amazon Nova Lite","input": 0.06,"output":0.24,"input_cached": null,"from_date": null,"to_date": null"id": "amazon-nova-micro","Amazon Nova Micro","1ndut": 0.035."output": 0.14,"input_cached": null,"from_date": null,"to date": nuluHow the data files workThe pricing data is maintained in individual JSON files in the data/ directory, with one file per vendor (e.g., data/anthropic.json, data/openal.json )•Each vendor file has the following structure:"vendor": "anthropic","id": "claude-3.7-sonnet","name": "Claude 3.7 Sonnet","orice history"."input": 3,"output": 15,"inout cachedi: null."from_date": null,"to_date": null...
|
NULL
|
7084275775409561534
|
NULL
|
click
|
ocr
|
NULL
|
HomeActivityFllesLaterMoreFirefoxMIStoMJiminny... HomeActivityFllesLaterMoreFirefoxMIStoMJiminny... ~# curiosity lab# engineering# general# jiminny-bg# platform-tickets# product launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...^? Direct messages. Galya Dimitrova MA. Aneliya Angelova @f Petko Kashinski@ Stefka Stoyanova€. Vasil VasilevCP. Nikolay Ivanov(3) Aneliva Angelova…Stoyan Tanev. Vese. Lukas Kovali... M o::: Apps& Toast4" Jira Cloud(m) Google Cale...© BadKeywordsQueryExcer( ConfiqurationExceotion.o© CrmException.php-crmUndateSycention.ohr© DatabaseException.phpE DealRisksEycention.nhn© DomainException.phpC EmailActivitvimnortEycen© ErrorDownloadingEmptyF) ErrorDownloadina Sile Syci© FileNotFoundException.pl© FileSystemException.php© Handler.php(@ HttnRodDoauoctEycontinA HttnRaNDebookmarksProtllesToolsWindow& # engineering• Messages©Canvas20260507)Help8 24e FilesMoreatecfix/npm-circlec APP 9-10 ANO 2 PRs with v Pnerability fixes are ready forreviewPlease take a look at the code and confirmthat everything works properly on yourlocal machine or on a planet environmentPull requests (jiminny/app)• 412049 hx cecurimv: comnoserdependency updates - 2026-05-07(secfix/composer-20260507)• #12048 fix(security): npm dependencyupdates - 2026-05-07 (secfix/npm-20260507)llan Kvuchukov 9.50AMClaude's limits are getang ridiculous. whatare you using from OpenAI? GPT-5.3Codey?e A 5 replies Last reply todayat 9-5...Message #engineering+ Aatroller.onpSautomatNew Tabe Jy 20820 es reindex stream mode[UY-20725] [HubSpot] Optimise CF@ JY-20725 add HS rate limit handlilO'Pipelines - jiminny/app• Pull requests • jiminny/appWY-207731 User Pilot not receivin@JY-20773 fix user pilot tracking ofrNY-20776 Automated report - seTypeError: LeaguelFlysystem|FilesA TypeError: League\Flysystem|FilesPlatform Sprint 3 02 - Platform TeJY-20361: Add call scores in P. Xsimonw/lim-prices: Prices of va X+ New Tab© github.com/simc~ Google Geminiintroduced by these additions. When you ask aLarge Language Model (LLM) to juggle largetranscripts alongside complex JsON scoringobjects, it creates specific friction points.Here is a breakdown of the potential issues andbottlenecks based on the changes:1. Token Consumption and Context Bloat(Bottleneck)• Massive Payload Size: By injecting thefull ai_call_score object into thecontext (which includes rule names,prompts, scores, text justifications, andup to three timestamps per rule), thetoken count per call will skyrocket.• Context Window Limits: The promptstates: "The full call context includes allcalls data available..." If a user filters for 5or 10 calls, injecting the transcripts plusthese extensive Al scoring arrays couldeasily hit the model's maximum contextwindow, leading to truncated data ordegraded recall (the "lost in the middle"effect).? 11 M Inctruction Conflicte (Iccme)• Pre-computed vs. Raw Transcript: Theprompt explicitly instructs the model: "Donot invent, override, or recalculatescores" but later says, "For what was• Enter a prompt for GeminiPro vYour Jiminny chats aren't used to improveJlrcan mite micnkes colcolliale chocktYottr orivaevdoSummarize pagea<40 hil © I Daily - Platform - 8mleft A 100% C/7 &• Tue 12 May 9:57:42OO READMEExample:"orices":"id": "amazon-nova-lite","vendor":amazon","name": "Amazon Nova Lite","input": 0.06,"output":0.24,"input_cached": null,"from_date": null,"to_date": null"id": "amazon-nova-micro","Amazon Nova Micro","1ndut": 0.035."output": 0.14,"input_cached": null,"from_date": null,"to date": nuluHow the data files workThe pricing data is maintained in individual JSON files in the data/ directory, with one file per vendor (e.g., data/anthropic.json, data/openal.json )•Each vendor file has the following structure:"vendor": "anthropic","id": "claude-3.7-sonnet","name": "Claude 3.7 Sonnet","orice history"."input": 3,"output": 15,"inout cachedi: null."from_date": null,"to_date": null...
|
22253
|
NULL
|
NULL
|
NULL
|
|
21113
|
922
|
16
|
2026-05-11T17:12:49.416430+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519569416_m1.jpg...
|
Code
|
screenpipe_sync_updated.sh — screenpipe [SSH: nas] screenpipe_sync_updated.sh — screenpipe [SSH: nas] — Untracked...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 10 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-707291648904908469
|
-5516287334125235328
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1...
|
21111
|
NULL
|
NULL
|
NULL
|
|
21114
|
923
|
18
|
2026-05-11T17:12:49.393476+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519569393_m2.jpg...
|
Code
|
screenpipe_sync_updated.sh — screenpipe [SSH: nas] screenpipe_sync_updated.sh — screenpipe [SSH: nas] — Untracked...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"bounds":{"left":0.009640957,"top":0.06863528,"width":0.0016622341,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 10 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":22,"bounds":{"left":0.00831117,"top":0.1452514,"width":0.003656915,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00831117,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.009973404,"top":0.14604948,"width":0.0023271276,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025265958,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028590426,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.02825798,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":27,"bounds":{"left":0.028590426,"top":0.13088587,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.13168396,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.030917553,"top":0.13168396,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.022273935,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.030917553,"top":0.14924182,"width":0.019946808,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.030917553,"top":0.16679968,"width":0.008976064,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.16679968,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.18435754,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"bounds":{"left":0.028590426,"top":0.20111732,"width":0.010638298,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.030917553,"top":0.2019154,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.2019154,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.03125,"top":0.21947326,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.23703113,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.254589,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.031914894,"top":0.254589,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.254589,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.032247342,"top":0.27214685,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.27214685,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.03025266,"top":0.2897047,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.2897047,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3064645,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.026928192,"top":0.32482043,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.32482043,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3415802,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.3415802,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.3423783,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3575419,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.35913807,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.35993615,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027260639,"top":0.35993615,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.37509975,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.37669593,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.377494,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.02825798,"top":0.377494,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3926576,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.3942538,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.39505187,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.02825798,"top":0.39505187,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.4102155,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.025930852,"top":0.41181165,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.41260973,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.02825798,"top":0.41260973,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.10704787,"top":0.41260973,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.42777336,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.4293695,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.4301676,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028590426,"top":0.4301676,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.44533122,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.025930852,"top":0.44692737,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.44772545,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.44772545,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.46288908,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.025930852,"top":0.46448523,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.46528333,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.46528333,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.48044693,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.025930852,"top":0.4820431,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.4828412,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.02825798,"top":0.4828412,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.10704787,"top":0.4828412,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.4980048,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.49960095,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.50039905,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.02825798,"top":0.50039905,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.51556265,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"}]...
|
-7952977788939551774
|
-5570334928362892928
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
21115
|
922
|
17
|
2026-05-11T17:12:57.596842+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519577596_m1.jpg...
|
Code
|
screenpipe_sync_updated.sh — screenpipe [SSH: nas] screenpipe_sync_updated.sh — screenpipe [SSH: nas] — Untracked...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
No results found
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 10 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).\n# Also copies the day's video/frame data folder to the NAS.\n#\n# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,\n# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,\n# so positional mismatches can't occur.\n#\n# Usage:\n# ./screenpipe_sync.sh # syncs yesterday (default)\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n#\n# Cron example (runs at 3am daily):\n# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\n# Tables that get schema drift handling. Order matters for FK-ish references\n# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).\nSYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nSCRIPT_START=$(date +%s)\n\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-20s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-20s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\n# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────\n# Echoes \"name|type\" lines for a table from a given DB.\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\n# Echoes just column names, one per line.\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\n# Returns true (0) if a table exists in the given DB.\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n # Use grep -F -x for fixed-string exact match (safe against regex chars).\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n # SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed\n # without a constant default. Default-NULL is exactly what we want for archive.\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Echoes a comma-separated list of source columns for a table, double-quoted\n# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.\nbuild_col_list() {\n local table=\"$1\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | sed 's/.*/\"&\"/' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-20s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-20s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-20s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-20s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-20s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-20s %s (%s files, %s)\\n\" \"Data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-20s %s\\n\" \"Data dir:\" \"not found — skipping file copy\"\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n printf \" %-20s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-20s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-20s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-20s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-20s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ]; then\n log \"No frames found for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n # ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────\n # Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,\n # and pre-existing tables get any missing columns added.\n step \"Reconciling NAS schema with source\"\n for tbl in \"${SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.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);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # After ensure_columns, source ⊆ NAS for every synced table, so source's\n # column list is a safe subset to use on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n\n # ─── SYNC DATA ────────────────────────────────────────────────────────────\n step \"Syncing data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)\n SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)\n SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)\n SELECT $OCR_TEXT_COLS FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)\n SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)\n SELECT $ELEMENTS_COLS FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)\n SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # NOTE: the elements/ocr_text inserts use unqualified column names while\n # selecting from a JOIN. SQLite resolves them against the leftmost table\n # that has the column, which is what we want here (e.* / o.* implicitly),\n # because none of the column names collide with frames'.\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n # ─── VERIFY DB ────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n\nfi\n\n# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────\n# Always runs regardless of DB sync status\nstep \"Copying data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync $TARGET_DATE/ → NAS\"\n rsync -a --ignore-existing \\\n \"$DATA_SRC/\" \\\n \"$NAS_DATA/$TARGET_DATE/\" \\\n 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -eq \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync $TARGET_DATE/ → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE\"\nlog \"========================================\"","depth":28,"on_screen":true,"value":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).\n# Also copies the day's video/frame data folder to the NAS.\n#\n# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,\n# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,\n# so positional mismatches can't occur.\n#\n# Usage:\n# ./screenpipe_sync.sh # syncs yesterday (default)\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n#\n# Cron example (runs at 3am daily):\n# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\n# Tables that get schema drift handling. Order matters for FK-ish references\n# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).\nSYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nSCRIPT_START=$(date +%s)\n\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-20s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-20s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\n# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────\n# Echoes \"name|type\" lines for a table from a given DB.\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\n# Echoes just column names, one per line.\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\n# Returns true (0) if a table exists in the given DB.\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n # Use grep -F -x for fixed-string exact match (safe against regex chars).\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n # SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed\n # without a constant default. Default-NULL is exactly what we want for archive.\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Echoes a comma-separated list of source columns for a table, double-quoted\n# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.\nbuild_col_list() {\n local table=\"$1\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | sed 's/.*/\"&\"/' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-20s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-20s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-20s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-20s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-20s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-20s %s (%s files, %s)\\n\" \"Data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-20s %s\\n\" \"Data dir:\" \"not found — skipping file copy\"\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n printf \" %-20s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-20s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-20s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-20s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-20s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ]; then\n log \"No frames found for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n # ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────\n # Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,\n # and pre-existing tables get any missing columns added.\n step \"Reconciling NAS schema with source\"\n for tbl in \"${SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.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);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # After ensure_columns, source ⊆ NAS for every synced table, so source's\n # column list is a safe subset to use on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n\n # ─── SYNC DATA ────────────────────────────────────────────────────────────\n step \"Syncing data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)\n SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)\n SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)\n SELECT $OCR_TEXT_COLS FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)\n SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)\n SELECT $ELEMENTS_COLS FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)\n SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # NOTE: the elements/ocr_text inserts use unqualified column names while\n # selecting from a JOIN. SQLite resolves them against the leftmost table\n # that has the column, which is what we want here (e.* / o.* implicitly),\n # because none of the column names collide with frames'.\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n # ─── VERIFY DB ────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n\nfi\n\n# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────\n# Always runs regardless of DB sync status\nstep \"Copying data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync $TARGET_DATE/ → NAS\"\n rsync -a --ignore-existing \\\n \"$DATA_SRC/\" \\\n \"$NAS_DATA/$TARGET_DATE/\" \\\n 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -eq \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync $TARGET_DATE/ → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE\"\nlog \"========================================\"","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).\n# Also copies the day's video/frame data folder to the NAS.\n#\n# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,\n# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,\n# so positional mismatches can't occur.\n#\n# Usage:\n# ./screenpipe_sync.sh # syncs yesterday (default)\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n#\n# Cron example (runs at 3am daily):\n# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\n# Tables that get schema drift handling. Order matters for FK-ish references\n# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).\nSYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nSCRIPT_START=$(date +%s)\n\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-20s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-20s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\n# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────\n# Echoes \"name|type\" lines for a table from a given DB.\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\n# Echoes just column names, one per line.\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\n# Returns true (0) if a table exists in the given DB.\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n # Use grep -F -x for fixed-string exact match (safe against regex chars).\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n # SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed\n # without a constant default. Default-NULL is exactly what we want for archive.\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Echoes a comma-separated list of source columns for a table, double-quoted\n# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.\nbuild_col_list() {\n local table=\"$1\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | sed 's/.*/\"&\"/' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-20s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-20s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-20s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-20s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-20s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-20s %s (%s files, %s)\\n\" \"Data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-20s %s\\n\" \"Data dir:\" \"not found — skipping file copy\"\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n printf \" %-20s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-20s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-20s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-20s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-20s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ]; then\n log \"No frames found for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n # ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────\n # Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,\n # and pre-existing tables get any missing columns added.\n step \"Reconciling NAS schema with source\"\n for tbl in \"${SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.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);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # After ensure_columns, source ⊆ NAS for every synced table, so source's\n # column list is a safe subset to use on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n\n # ─── SYNC DATA ────────────────────────────────────────────────────────────\n step \"Syncing data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)\n SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)\n SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)\n SELECT $OCR_TEXT_COLS FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)\n SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)\n SELECT $ELEMENTS_COLS FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)\n SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # NOTE: the elements/ocr_text inserts use unqualified column names while\n # selecting from a JOIN. SQLite resolves them against the leftmost table\n # that has the column, which is what we want here (e.* / o.* implicitly),\n # because none of the column names collide with frames'.\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n # ─── VERIFY DB ────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n\nfi\n\n# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────\n# Always runs regardless of DB sync status\nstep \"Copying data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync $TARGET_DATE/ → NAS\"\n rsync -a --ignore-existing \\\n \"$DATA_SRC/\" \\\n \"$NAS_DATA/$TARGET_DATE/\" \\\n 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -eq \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync $TARGET_DATE/ → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE\"\nlog \"========================================\"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"No results found","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6920325012745602585
|
3751665402955369749
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
No results found
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
21116
|
923
|
19
|
2026-05-11T17:12:57.554174+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519577554_m2.jpg...
|
Code
|
screenpipe_sync_updated.sh — screenpipe [SSH: nas] screenpipe_sync_updated.sh — screenpipe [SSH: nas] — Untracked...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
No results found
Implement and run pipe logic...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"bounds":{"left":0.009640957,"top":0.06863528,"width":0.0016622341,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 10 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"10","depth":22,"bounds":{"left":0.00831117,"top":0.1452514,"width":0.003656915,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00831117,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.009973404,"top":0.14604948,"width":0.0023271276,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025265958,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028590426,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.02825798,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"__pycache__","depth":27,"bounds":{"left":0.028590426,"top":0.13088587,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.13168396,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.030917553,"top":0.13168396,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.022273935,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.030917553,"top":0.14924182,"width":0.019946808,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.030917553,"top":0.16679968,"width":0.008976064,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.16679968,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.18435754,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"bounds":{"left":0.028590426,"top":0.20111732,"width":0.010638298,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.030917553,"top":0.2019154,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.2019154,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.011303191,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.03125,"top":0.21947326,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.23703113,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.254589,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.031914894,"top":0.254589,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.254589,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.015625,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.032247342,"top":0.27214685,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.27214685,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.03025266,"top":0.2897047,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.10638298,"top":0.2897047,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3064645,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.3064645,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.026928192,"top":0.32482043,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.32482043,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.3415802,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.3415802,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.3423783,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3575419,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.35913807,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.35993615,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027260639,"top":0.35993615,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.37509975,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.37669593,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.377494,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.02825798,"top":0.377494,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3926576,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.3942538,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.39505187,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.02825798,"top":0.39505187,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.4102155,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.025930852,"top":0.41181165,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.41260973,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.02825798,"top":0.41260973,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.10704787,"top":0.41260973,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.42777336,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.4293695,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.4301676,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028590426,"top":0.4301676,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.44533122,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.025930852,"top":0.44692737,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.44772545,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.44772545,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.46288908,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.025930852,"top":0.46448523,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.46528333,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.46528333,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.48044693,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.025930852,"top":0.4820431,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.4828412,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.02825798,"top":0.4828412,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.10704787,"top":0.4828412,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.4980048,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.49960095,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.50039905,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.02825798,"top":0.50039905,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.51556265,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.5171588,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.5179569,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.02825798,"top":0.5179569,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.17154256,"top":0.047885075,"width":0.06050532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.08344415,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.3148271,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.35472074,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).\n# Also copies the day's video/frame data folder to the NAS.\n#\n# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,\n# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,\n# so positional mismatches can't occur.\n#\n# Usage:\n# ./screenpipe_sync.sh # syncs yesterday (default)\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n#\n# Cron example (runs at 3am daily):\n# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\n# Tables that get schema drift handling. Order matters for FK-ish references\n# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).\nSYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nSCRIPT_START=$(date +%s)\n\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-20s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-20s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\n# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────\n# Echoes \"name|type\" lines for a table from a given DB.\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\n# Echoes just column names, one per line.\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\n# Returns true (0) if a table exists in the given DB.\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n # Use grep -F -x for fixed-string exact match (safe against regex chars).\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n # SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed\n # without a constant default. Default-NULL is exactly what we want for archive.\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Echoes a comma-separated list of source columns for a table, double-quoted\n# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.\nbuild_col_list() {\n local table=\"$1\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | sed 's/.*/\"&\"/' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-20s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-20s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-20s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-20s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-20s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-20s %s (%s files, %s)\\n\" \"Data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-20s %s\\n\" \"Data dir:\" \"not found — skipping file copy\"\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n printf \" %-20s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-20s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-20s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-20s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-20s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ]; then\n log \"No frames found for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n # ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────\n # Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,\n # and pre-existing tables get any missing columns added.\n step \"Reconciling NAS schema with source\"\n for tbl in \"${SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.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);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # After ensure_columns, source ⊆ NAS for every synced table, so source's\n # column list is a safe subset to use on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n\n # ─── SYNC DATA ────────────────────────────────────────────────────────────\n step \"Syncing data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)\n SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)\n SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)\n SELECT $OCR_TEXT_COLS FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)\n SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)\n SELECT $ELEMENTS_COLS FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)\n SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # NOTE: the elements/ocr_text inserts use unqualified column names while\n # selecting from a JOIN. SQLite resolves them against the leftmost table\n # that has the column, which is what we want here (e.* / o.* implicitly),\n # because none of the column names collide with frames'.\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n # ─── VERIFY DB ────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n\nfi\n\n# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────\n# Always runs regardless of DB sync status\nstep \"Copying data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync $TARGET_DATE/ → NAS\"\n rsync -a --ignore-existing \\\n \"$DATA_SRC/\" \\\n \"$NAS_DATA/$TARGET_DATE/\" \\\n 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -eq \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync $TARGET_DATE/ → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE\"\nlog \"========================================\"","depth":28,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.38031915,"height":0.0007980846},"on_screen":true,"value":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).\n# Also copies the day's video/frame data folder to the NAS.\n#\n# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,\n# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,\n# so positional mismatches can't occur.\n#\n# Usage:\n# ./screenpipe_sync.sh # syncs yesterday (default)\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n#\n# Cron example (runs at 3am daily):\n# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\n# Tables that get schema drift handling. Order matters for FK-ish references\n# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).\nSYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nSCRIPT_START=$(date +%s)\n\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-20s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-20s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\n# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────\n# Echoes \"name|type\" lines for a table from a given DB.\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\n# Echoes just column names, one per line.\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\n# Returns true (0) if a table exists in the given DB.\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n # Use grep -F -x for fixed-string exact match (safe against regex chars).\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n # SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed\n # without a constant default. Default-NULL is exactly what we want for archive.\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Echoes a comma-separated list of source columns for a table, double-quoted\n# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.\nbuild_col_list() {\n local table=\"$1\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | sed 's/.*/\"&\"/' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-20s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-20s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-20s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-20s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-20s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-20s %s (%s files, %s)\\n\" \"Data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-20s %s\\n\" \"Data dir:\" \"not found — skipping file copy\"\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n printf \" %-20s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-20s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-20s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-20s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-20s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ]; then\n log \"No frames found for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n # ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────\n # Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,\n # and pre-existing tables get any missing columns added.\n step \"Reconciling NAS schema with source\"\n for tbl in \"${SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.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);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # After ensure_columns, source ⊆ NAS for every synced table, so source's\n # column list is a safe subset to use on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n\n # ─── SYNC DATA ────────────────────────────────────────────────────────────\n step \"Syncing data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)\n SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)\n SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)\n SELECT $OCR_TEXT_COLS FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)\n SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)\n SELECT $ELEMENTS_COLS FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)\n SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # NOTE: the elements/ocr_text inserts use unqualified column names while\n # selecting from a JOIN. SQLite resolves them against the leftmost table\n # that has the column, which is what we want here (e.* / o.* implicitly),\n # because none of the column names collide with frames'.\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n # ─── VERIFY DB ────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n\nfi\n\n# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────\n# Always runs regardless of DB sync status\nstep \"Copying data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync $TARGET_DATE/ → NAS\"\n rsync -a --ignore-existing \\\n \"$DATA_SRC/\" \\\n \"$NAS_DATA/$TARGET_DATE/\" \\\n 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -eq \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync $TARGET_DATE/ → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE\"\nlog \"========================================\"","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).\n# Also copies the day's video/frame data folder to the NAS.\n#\n# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,\n# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,\n# so positional mismatches can't occur.\n#\n# Usage:\n# ./screenpipe_sync.sh # syncs yesterday (default)\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n#\n# Cron example (runs at 3am daily):\n# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\n# Tables that get schema drift handling. Order matters for FK-ish references\n# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).\nSYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nSCRIPT_START=$(date +%s)\n\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-20s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-20s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\n# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────\n# Echoes \"name|type\" lines for a table from a given DB.\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\n# Echoes just column names, one per line.\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\n# Returns true (0) if a table exists in the given DB.\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n # Use grep -F -x for fixed-string exact match (safe against regex chars).\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n # SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed\n # without a constant default. Default-NULL is exactly what we want for archive.\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Echoes a comma-separated list of source columns for a table, double-quoted\n# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.\nbuild_col_list() {\n local table=\"$1\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | sed 's/.*/\"&\"/' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-20s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-20s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-20s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-20s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-20s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-20s %s (%s files, %s)\\n\" \"Data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-20s %s\\n\" \"Data dir:\" \"not found — skipping file copy\"\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n printf \" %-20s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-20s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-20s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-20s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-20s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ]; then\n log \"No frames found for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n # ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────\n # Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,\n # and pre-existing tables get any missing columns added.\n step \"Reconciling NAS schema with source\"\n for tbl in \"${SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.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);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # After ensure_columns, source ⊆ NAS for every synced table, so source's\n # column list is a safe subset to use on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n\n # ─── SYNC DATA ────────────────────────────────────────────────────────────\n step \"Syncing data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)\n SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)\n SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)\n SELECT $OCR_TEXT_COLS FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)\n SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)\n SELECT $ELEMENTS_COLS FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)\n SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # NOTE: the elements/ocr_text inserts use unqualified column names while\n # selecting from a JOIN. SQLite resolves them against the leftmost table\n # that has the column, which is what we want here (e.* / o.* implicitly),\n # because none of the column names collide with frames'.\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n # ─── VERIFY DB ────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n\nfi\n\n# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────\n# Always runs regardless of DB sync status\nstep \"Copying data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync $TARGET_DATE/ → NAS\"\n rsync -a --ignore-existing \\\n \"$DATA_SRC/\" \\\n \"$NAS_DATA/$TARGET_DATE/\" \\\n 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -eq \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync $TARGET_DATE/ → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync $TARGET_DATE/ → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE\"\nlog \"========================================\"","depth":29,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.35804522,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.21276596,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.23537233,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.2393617,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.25465426,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.030917553,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.05418883,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.06416223,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06582447,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09009308,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"No results found","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8587183063490674106
|
4328126292698795287
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 10 pending changes
10
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
__pycache__
consumers
static
.env
cli.py
M
db.py
docker-compose.yml
Dockerfile
M
main.py
M
requirements.txt
M
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data to a NAS archive database (append-only, no deletions).
# Also copies the day's video/frame data folder to the NAS.
#
# Schema-drift tolerant: if Screenpipe migrations add new columns to the source DB,
# the NAS archive gets ALTER TABLE'd to match. Inserts use explicit column lists,
# so positional mismatches can't occur.
#
# Usage:
# ./screenpipe_sync.sh # syncs yesterday (default)
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
#
# Cron example (runs at 3am daily):
# 0 3 * * * /Users/lukas/.screenpipe/screenpipe_sync.sh >> /Users/lukas/.screenpipe/sync.log 2>&1
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
# Tables that get schema drift handling. Order matters for FK-ish references
# (parents before children: video_chunks → frames → elements/ocr_text/ui_events).
SYNC_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
# ──────────────────────────────────────────────────────────────────────────────
# ─── HELPERS ──────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-20s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-20s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
# ─── SCHEMA HELPERS ───────────────────────────────────────────────────────────
# Echoes "name|type" lines for a table from a given DB.
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
# Echoes just column names, one per line.
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
# Returns true (0) if a table exists in the given DB.
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Uses ALTER TABLE ADD COLUMN, which is a fast metadata-only operation in SQLite.
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
# Use grep -F -x for fixed-string exact match (safe against regex chars).
if ! echo "$nas_cols" | grep -Fxq "$name"; then
# SQLite ALTER TABLE ADD COLUMN: type is optional, no NOT NULL allowed
# without a constant default. Default-NULL is exactly what we want for archive.
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Echoes a comma-separated list of source columns for a table, double-quoted
# so reserved words and hyphens are safe. Used for both INSERT and SELECT sides.
build_col_list() {
local table="$1"
table_columns "$DB_SRC" "$table" | awk 'NF' | sed 's/.*/"&"/' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── DATE ARGUMENT ────────────────────────────────────────────────────────────
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-20s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-20s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/null || echo "0")
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE already has $EXISTING frames in archive — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-20s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-20s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-20s %s (%s files, %s)\n" "Data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-20s %s\n" "Data dir:" "not found — skipping file copy"
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
printf " %-20s %s\n" "frames:" "$SRC_FRAMES"
printf " %-20s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-20s %s\n" "ui_events:" "$SRC_UI"
printf " %-20s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-20s %s\n" "meetings:" "$SRC_MEETINGS"
if [ "$SRC_FRAMES" -eq "0" ]; then
log "No frames found for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
# ─── SCHEMA DRIFT FIX ─────────────────────────────────────────────────────
# Runs AFTER CREATE IF NOT EXISTS so newly-created tables are no-ops here,
# and pre-existing tables get any missing columns added.
step "Reconciling NAS schema with source"
for tbl in "${SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# After ensure_columns, source ⊆ NAS for every synced table, so source's
# column list is a safe subset to use on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
# ─── SYNC DATA ────────────────────────────────────────────────────────────
step "Syncing data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS)
SELECT $VIDEO_CHUNKS_COLS FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS)
SELECT $FRAMES_COLS FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS)
SELECT $OCR_TEXT_COLS FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS)
SELECT $UI_EVENTS_COLS FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS)
SELECT $ELEMENTS_COLS FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS)
SELECT $MEETINGS_COLS FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# NOTE: the elements/ocr_text inserts use unqualified column names while
# selecting from a JOIN. SQLite resolves them against the leftmost table
# that has the column, which is what we want here (e.* / o.* implicitly),
# because none of the column names collide with frames'.
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND text_content IS NOT NULL;
DETACH nas;
"
# ─── VERIFY DB ────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start)= '$TARGET_DATE';")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
fi
# ─── COPY DATA FOLDER ─────────────────────────────────────────────────────────
# Always runs regardless of DB sync status
step "Copying data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync $TARGET_DATE/ → NAS"
rsync -a --ignore-existing \
"$DATA_SRC/" \
"$NAS_DATA/$TARGET_DATE/" \
2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -eq "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync $TARGET_DATE/ → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync $TARGET_DATE/ → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync $TARGET_DATE/ → NAS" "skipped (no source dir)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE"
log "========================================"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
No results found
Implement and run pipe logic...
|
21114
|
NULL
|
NULL
|
NULL
|
|
26190
|
1088
|
11
|
2026-05-12T12:13:04.260366+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587984260_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_e...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"on_screen":true,"value":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4373886717059241707
|
8950930160388362005
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_e...
|
26184
|
NULL
|
NULL
|
NULL
|
|
26191
|
1089
|
15
|
2026-05-12T12:13:04.260363+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587984260_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_e...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.584996,"width":0.42021278,"height":0.014365523},"on_screen":true,"value":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.584996,"width":0.42021278,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4373886717059241707
|
8950930160388362005
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_e...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26192
|
1088
|
12
|
2026-05-12T12:13:04.915190+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587984915_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 675, Col 1","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"}]...
|
-1426101493785734209
|
2645958821465460117
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26193
|
1089
|
16
|
2026-05-12T12:13:04.973084+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587984973_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.29768556,"width":0.42021278,"height":0.014365523},"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.29768556,"width":0.42021278,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 675, Col 1","depth":16,"bounds":{"left":0.8494016,"top":0.98244214,"width":0.028922873,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"bounds":{"left":0.8018617,"top":0.98244214,"width":0.045545213,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.80352396,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"bounds":{"left":0.8088431,"top":0.9856345,"width":0.036901597,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"}]...
|
4404059980821856049
|
2609930002703224757
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py...
|
26191
|
NULL
|
NULL
|
NULL
|
|
26194
|
1088
|
13
|
2026-05-12T12:13:05.672464+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587985672_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 675, Col 1","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read summary consumer","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\n__pycache__\nreport.py\nsummary.py\n\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(for_date, limit=20)\n url_lines = \"\\n\".join(\n f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls\n )\n\n ui_rows = ui_event_summary(for_date)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"browser_urls\": url_lines or \"(no browser data)\",\n \"ui_events\": ui_lines or \"(no UI event data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read all pipe.md files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for f in /volume1/screenpipe/pipes/*/pipe.md; do echo \"=== $f ===\"; cat \"$f\"; echo; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: AI Habits\ndescription: \"How you use AI tools — patterns and insights\"\nicon: \"🤖\"\nfeatured: true\n---\n\nSearch my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## AI Tools Used\n- List each tool with approximate time spent (e.g. \"Claude: ~45min\")\n\n## What I Used Them For\n- For each tool: coding, writing, research, or brainstorming\n\n## Usage Patterns\n- Do I switch between tools? Use them in bursts or steadily?\n\n## Effectiveness\n- Which tool appeared alongside completed work vs. abandoned attempts\n\nIf no AI usage is found, say so clearly. End with: \"**Tip:** [one suggestion to use AI tools more effectively]\"\n\n=== /volume1/screenpipe/pipes/day-recap/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n\n=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.\n\n=== /volume1/screenpipe/pipes/standup-update/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Standup Update\ndescription: \"What you did, what's next, and any blockers\"\nicon: \"🏢\"\nfeatured: true\n---\n\nBased on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Yesterday\n- What I worked on (name specific projects, files, tools, PRs)\n\n## Today\n- What I will work on next (based on unfinished tasks and recent activity)\n\n## Blockers\n- Issues I hit — errors, slow builds, waiting on someone\n- If no blockers, write \"None\"\n\nKeep it under 150 words. Copy-paste ready for a team standup.\n\n=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Time Breakdown\ndescription: \"Where your time went — by app, project, and category\"\nicon: \"⏱\"\nfeatured: false\n---\n\nAnalyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.\n\nRead screenpipe skill first.\n\nUse this exact format with durations and percentages:\n\n## By Application\n- List each app with duration and percentage, sorted by time (e.g. \"VS Code: 2h 15min (28%)\")\n\n## By Category\n- Group into: coding, meetings, browsing, writing, communication, other\n- Show hours and percentage per category\n\n## By Project\n- Group related activities by project/topic. Name specific repos or tasks.\n\n## Productivity Score\n- Calculate: focused_work_hours / total_hours as a percentage\n- Focused = coding + writing. Unfocused = browsing + switching.\n\nEnd with: \"**Suggestion:** [one specific change to improve tomorrow's productivity]\"\n\n=== /volume1/screenpipe/pipes/video-export/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Export Video Clip\ndescription: \"Create a video of your recent screen activity\"\nicon: \"🎬\"\nfeatured: false\n---\n\nExport a video of my screen activity from the last 5 minutes.\n\nRead screenpipe skill first.\n\nUse the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.\n\nIf the export is large, suggest a lower fps or shorter time range.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a clear picture. The pipes are markdown prompt templates in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/pipes/","depth":24,"on_screen":false,"role_description":"text"}]...
|
1615006766013815548
|
-7752448068628017740
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/...
|
26192
|
NULL
|
NULL
|
NULL
|
|
26195
|
1089
|
17
|
2026-05-12T12:13:05.672432+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587985672_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.29768556,"width":0.42021278,"height":0.014365523},"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.29768556,"width":0.42021278,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 675, Col 1","depth":16,"bounds":{"left":0.8494016,"top":0.98244214,"width":0.028922873,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"bounds":{"left":0.8018617,"top":0.98244214,"width":0.045545213,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.80352396,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"bounds":{"left":0.8088431,"top":0.9856345,"width":0.036901597,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"}]...
|
6906643358562603033
|
1493459529290123701
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 675, Col 1
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26196
|
1089
|
18
|
2026-05-12T12:13:08.034236+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587988034_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_e...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.584996,"width":0.42021278,"height":0.014365523},"on_screen":true,"value":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.584996,"width":0.42021278,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 695, Col 79 (29288 selected)","depth":16,"bounds":{"left":0.8128325,"top":0.98244214,"width":0.06549202,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"bounds":{"left":0.7652925,"top":0.98244214,"width":0.045877658,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.7669548,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"bounds":{"left":0.77227396,"top":0.9856345,"width":0.03723404,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"}]...
|
-4373886717059241707
|
8950930160388362005
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_e...
|
26195
|
NULL
|
NULL
|
NULL
|
|
26197
|
1089
|
19
|
2026-05-12T12:13:11.047096+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587991047_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 214, Col 74
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/
, but there's no code to actually load and run them —
consumers/summary.py
has its own hardcoded prompts instead.
Here's what I'll implement:
consumers/pipes.py
— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)
main.py
— two new endpoints:
GET /api/pipes
and
POST /api/pipes/{pipe_id}/run
cli.py
— a
pipe
command to run pipes from the terminal
Let me build it:
Bash
Check browser_urls signature
IN
cat /volume1/screenpipe/app/consumers/activity.py | grep "def browser_urls" -A 5
Copy code to clipboard
OUT
def browser_urls(
for_date: date | None = None,
app_name: str | None = None,
ts_from: str | None = None,
ts_to: str | None = None,
limit: int = 30,
Write
pipes.py
pipes.py
143 lines
"""Dynamic pipe loader and runner."""
import os
import re
from datetime import date
from pathlib import Path
from typing import Any
def _parse_frontmatter(text: str) -> tuple[dict, str]:
if not text.startswith("---"):
return {}, text
try:
end = text.index("---", 3)
except ValueError:
return {}, text
fm_text = text[3:end].strip()
body = text[end + 3:].strip()
meta: dict = {}
for line in fm_text.splitlines():
if ":" in line:
k, _, v = line.partition(":")
meta[k.strip()] = v.strip().strip('"')
return meta, body
def load_pipes(pipes_dir: Path) -> list[dict]:
if not pipes_dir.exists():
return []
pipes = []
for pipe_dir in sorted(pipes_dir.iterdir()):
if not pipe_dir.is_dir() or pipe_dir.name.startswith("."):
continue
pipe_md = pipe_dir / "pipe.md"
if not pipe_md.exists():
continue
text = pipe_md.read_text(encoding="utf-8")
meta, body = _parse_frontmatter(text)
if meta.get("enabled", "true").lower() == "false":
continue
body = re.sub(r"Read screenpipe skill first\.?\n?", "", body).strip()
pipes.append({
"id": pipe_dir.name,
"title": meta.get("title", pipe_dir.name),
"description": meta.get("description", ""),
"icon": meta.get("icon", ""),
"schedule": meta.get("schedule", "manual"),
"featured": meta.get("featured", "false").lower() == "true",
"prompt": body,
})
return pipes
def _build_system(d: date, stats: dict) -> str:
from consumers.activity import app_time, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
apps = app_time(d)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(d, limit=20)
url_lines = "\n".join(f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls)
ui_rows = ui_event_summary(d)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(d, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(d)
if len(audio) > 3000:
audio = audio[:3000]
return f"""You are analyzing screenpipe data — recordings of a person's computer activity.
## App usage (minutes per app):
{app_lines or '(no app data)'}
## Browser URLs visited:
{url_lines or '(no browser data)'}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_lines or '(no UI event data)'}
## Screen content (sampled every 5 minutes):
{ocr_lines or '(no screen data)'}
## Audio / speech:
{audio or '(no audio data)'}
Date: {d}
Total frames recorded: {stats['total_frames']}"""
def run_pipe(
pipe_id: str,
for_date: date | None = None,
api_key: str | None = None,
pipes_dir: Path | None = None,
) -> dict[str, Any]:
import anthropic
from consumers.activity import summary_stats
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {"title": "Error", "content": "ANTHROPIC_API_KEY not set.", "date": str(d)}
_pipes_dir = pipes_dir or Path(os.environ.get("PIPES_DIR", "/data/pipes"))
all_pipes = {p["id"]: p for p in load_pipes(_pipes_dir)}
if pipe_id not in all_pipes:
return {"title": "Error", "content": f"Pipe not found: {pipe_id}", "date": str(d)}
pipe = all_pipes[pipe_id]
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {"title": pipe["title"], "content": f"No screen data found for {d}.", "date": str(d)}
system = _build_system(d, stats)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
system=system,
messages=[{"role": "user", "content": pipe["prompt"]}],
)
return {
"title": pipe["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Now add the API endpoints to
main.py
:...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"bounds":{"left":0.009973404,"top":0.06863528,"width":0.0016622341,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_fts_migrate.sh\n# One-shot migration of the screenpipe NAS archive DB to the new schema:\n# - adds install_id column to every synced base table\n# - creates the _installs registry\n# - rebuilds all four FTS tables as contentless with install_id + source_id\n#\n# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on\n# its first run. The point of running this separately is SPEED: SQLite over\n# SMB is slow due to fsync semantics, and the FTS rebuild reads every row\n# of every base table. Running the rebuild locally on the NAS over SSH is\n# typically 5-10x faster.\n#\n# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.\n#\n# Usage\n# -----\n# On the NAS via SSH (recommended for archives > 1 GB):\n# ssh Adm1n@192.168.0.242\n# # copy this script over first, then:\n# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db\n#\n# On Mac (works but slower):\n# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db\n# # or with no arg to use the default Mac mount path:\n# ./screenpipe_fts_migrate.sh\n\nset -euo pipefail\n\nNAS_DB=\"${1:-/Volumes/screenpipe/archive.db}\"\n\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nSHARED_TABLES=(tags vision_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\" \"${SHARED_TABLES[@]}\")\nFTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\ntable_exists() {\n local count\n count=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';\")\n [ \"$count\" -gt 0 ]\n}\n\nstep() {\n printf \"\\n▶ %s\\n\" \"$*\"\n}\n\nrun_with_timer() {\n local label=\"$1\" sql=\"$2\"\n local start\n start=$(date +%s)\n printf \" %-44s \" \"$label\"\n if sqlite3 \"$NAS_DB\" \"$sql\" > /dev/null 2>&1; then\n local dur=$(( $(date +%s) - start ))\n printf \"✓ %dm%02ds\\n\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\"\n else\n printf \"✗ FAILED\\n\"\n sqlite3 \"$NAS_DB\" \"$sql\" # re-run to surface the error\n exit 1\n fi\n}\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\n[ -f \"$NAS_DB\" ] || { echo \"ERROR: $NAS_DB not found\"; exit 1; }\n\necho \"================================================\"\necho \"Screenpipe FTS migration\"\necho \"DB: $NAS_DB\"\necho \"Size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\n\n# ─── STEP 1: install registry ─────────────────────────────────────────────────\nstep \"Creating install registry\"\nrun_with_timer \"_installs table\" \"\nCREATE TABLE IF NOT EXISTS _installs (\n install_id TEXT PRIMARY KEY,\n install_seq INTEGER NOT NULL UNIQUE,\n first_seen TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\"\n\n# ─── STEP 2: install_id on base tables ────────────────────────────────────────\nstep \"Adding install_id to base tables\"\nLEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\nLEGACY_USED=false\nfor tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$tbl\"; then\n printf \" %-44s (table not present, skipping)\\n\" \"$tbl\"\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-44s adding (backfill %s rows)\\n\" \"$tbl\" \"$ROW_COUNT\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n [ \"$ROW_COUNT\" -gt \"0\" ] && LEGACY_USED=true\n else\n printf \" %-44s already present\\n\" \"$tbl\"\n fi\n if [ \"$tbl\" = \"vision_tags\" ]; then\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);\"\n else\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n fi\ndone\n\nif [ \"$LEGACY_USED\" = true ]; then\n sqlite3 \"$NAS_DB\" \"\n INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)\n VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');\n \"\nfi\n\n# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────\nOLD_FTS_DETECTED=false\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n SCHEMA_SQL=$(sqlite3 \"$NAS_DB\" \"SELECT sql FROM sqlite_master WHERE name='$fts';\")\n if echo \"$SCHEMA_SQL\" | grep -q \"content=\" || ! echo \"$SCHEMA_SQL\" | grep -q \"install_id\"; then\n OLD_FTS_DETECTED=true\n break\n fi\n fi\ndone\n\nif [ \"$OLD_FTS_DETECTED\" = false ]; then\n echo \"\"\n echo \"FTS tables already on the new schema — nothing to rebuild.\"\n echo \"Migration complete.\"\n exit 0\nfi\n\n# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────\nstep \"Rebuilding FTS tables (this is the slow part)\"\n\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n run_with_timer \"drop old $fts\" \"DROP TABLE $fts;\"\n fi\ndone\n\nrun_with_timer \"create frames_fts\" \"\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create elements_fts\" \"\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create ui_events_fts\" \"\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create audio_transcriptions_fts\" \"\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\n\n# Populate from base tables. The slow operations live here.\nif table_exists \"frames\"; then\n run_with_timer \"populate frames_fts\" \"\n INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM frames WHERE full_text IS NOT NULL AND full_text != '';\n \"\nfi\nif table_exists \"elements\"; then\n run_with_timer \"populate elements_fts\" \"\n INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)\n SELECT text, role, install_id, id, frame_id\n FROM elements WHERE text IS NOT NULL;\n \"\nfi\nif table_exists \"ui_events\"; then\n run_with_timer \"populate ui_events_fts\" \"\n INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM ui_events WHERE text_content IS NOT NULL;\n \"\nfi\nif table_exists \"audio_transcriptions\"; then\n run_with_timer \"populate audio_transcriptions_fts\" \"\n INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT transcription, COALESCE(device,''), speaker_id, install_id, id\n FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';\n \"\nfi\n\necho \"\"\necho \"================================================\"\necho \"Migration complete.\"\necho \"Final DB size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\necho \"\"\necho \"Sanity-check queries you can run:\"\necho \" sqlite3 $NAS_DB 'SELECT * FROM _installs;'\"\necho \" sqlite3 $NAS_DB \\\"SELECT sql FROM sqlite_master WHERE name='frames_fts';\\\"\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'\"","depth":28,"bounds":{"left":0.116023935,"top":0.0933759,"width":0.38031915,"height":0.0007980846},"on_screen":true,"value":"#!/bin/bash\n# screenpipe_fts_migrate.sh\n# One-shot migration of the screenpipe NAS archive DB to the new schema:\n# - adds install_id column to every synced base table\n# - creates the _installs registry\n# - rebuilds all four FTS tables as contentless with install_id + source_id\n#\n# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on\n# its first run. The point of running this separately is SPEED: SQLite over\n# SMB is slow due to fsync semantics, and the FTS rebuild reads every row\n# of every base table. Running the rebuild locally on the NAS over SSH is\n# typically 5-10x faster.\n#\n# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.\n#\n# Usage\n# -----\n# On the NAS via SSH (recommended for archives > 1 GB):\n# ssh Adm1n@192.168.0.242\n# # copy this script over first, then:\n# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db\n#\n# On Mac (works but slower):\n# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db\n# # or with no arg to use the default Mac mount path:\n# ./screenpipe_fts_migrate.sh\n\nset -euo pipefail\n\nNAS_DB=\"${1:-/Volumes/screenpipe/archive.db}\"\n\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nSHARED_TABLES=(tags vision_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\" \"${SHARED_TABLES[@]}\")\nFTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\ntable_exists() {\n local count\n count=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';\")\n [ \"$count\" -gt 0 ]\n}\n\nstep() {\n printf \"\\n▶ %s\\n\" \"$*\"\n}\n\nrun_with_timer() {\n local label=\"$1\" sql=\"$2\"\n local start\n start=$(date +%s)\n printf \" %-44s \" \"$label\"\n if sqlite3 \"$NAS_DB\" \"$sql\" > /dev/null 2>&1; then\n local dur=$(( $(date +%s) - start ))\n printf \"✓ %dm%02ds\\n\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\"\n else\n printf \"✗ FAILED\\n\"\n sqlite3 \"$NAS_DB\" \"$sql\" # re-run to surface the error\n exit 1\n fi\n}\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\n[ -f \"$NAS_DB\" ] || { echo \"ERROR: $NAS_DB not found\"; exit 1; }\n\necho \"================================================\"\necho \"Screenpipe FTS migration\"\necho \"DB: $NAS_DB\"\necho \"Size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\n\n# ─── STEP 1: install registry ─────────────────────────────────────────────────\nstep \"Creating install registry\"\nrun_with_timer \"_installs table\" \"\nCREATE TABLE IF NOT EXISTS _installs (\n install_id TEXT PRIMARY KEY,\n install_seq INTEGER NOT NULL UNIQUE,\n first_seen TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\"\n\n# ─── STEP 2: install_id on base tables ────────────────────────────────────────\nstep \"Adding install_id to base tables\"\nLEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\nLEGACY_USED=false\nfor tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$tbl\"; then\n printf \" %-44s (table not present, skipping)\\n\" \"$tbl\"\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-44s adding (backfill %s rows)\\n\" \"$tbl\" \"$ROW_COUNT\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n [ \"$ROW_COUNT\" -gt \"0\" ] && LEGACY_USED=true\n else\n printf \" %-44s already present\\n\" \"$tbl\"\n fi\n if [ \"$tbl\" = \"vision_tags\" ]; then\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);\"\n else\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n fi\ndone\n\nif [ \"$LEGACY_USED\" = true ]; then\n sqlite3 \"$NAS_DB\" \"\n INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)\n VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');\n \"\nfi\n\n# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────\nOLD_FTS_DETECTED=false\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n SCHEMA_SQL=$(sqlite3 \"$NAS_DB\" \"SELECT sql FROM sqlite_master WHERE name='$fts';\")\n if echo \"$SCHEMA_SQL\" | grep -q \"content=\" || ! echo \"$SCHEMA_SQL\" | grep -q \"install_id\"; then\n OLD_FTS_DETECTED=true\n break\n fi\n fi\ndone\n\nif [ \"$OLD_FTS_DETECTED\" = false ]; then\n echo \"\"\n echo \"FTS tables already on the new schema — nothing to rebuild.\"\n echo \"Migration complete.\"\n exit 0\nfi\n\n# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────\nstep \"Rebuilding FTS tables (this is the slow part)\"\n\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n run_with_timer \"drop old $fts\" \"DROP TABLE $fts;\"\n fi\ndone\n\nrun_with_timer \"create frames_fts\" \"\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create elements_fts\" \"\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create ui_events_fts\" \"\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create audio_transcriptions_fts\" \"\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\n\n# Populate from base tables. The slow operations live here.\nif table_exists \"frames\"; then\n run_with_timer \"populate frames_fts\" \"\n INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM frames WHERE full_text IS NOT NULL AND full_text != '';\n \"\nfi\nif table_exists \"elements\"; then\n run_with_timer \"populate elements_fts\" \"\n INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)\n SELECT text, role, install_id, id, frame_id\n FROM elements WHERE text IS NOT NULL;\n \"\nfi\nif table_exists \"ui_events\"; then\n run_with_timer \"populate ui_events_fts\" \"\n INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM ui_events WHERE text_content IS NOT NULL;\n \"\nfi\nif table_exists \"audio_transcriptions\"; then\n run_with_timer \"populate audio_transcriptions_fts\" \"\n INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT transcription, COALESCE(device,''), speaker_id, install_id, id\n FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';\n \"\nfi\n\necho \"\"\necho \"================================================\"\necho \"Migration complete.\"\necho \"Final DB size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\necho \"\"\necho \"Sanity-check queries you can run:\"\necho \" sqlite3 $NAS_DB 'SELECT * FROM _installs;'\"\necho \" sqlite3 $NAS_DB \\\"SELECT sql FROM sqlite_master WHERE name='frames_fts';\\\"\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'\"","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_fts_migrate.sh\n# One-shot migration of the screenpipe NAS archive DB to the new schema:\n# - adds install_id column to every synced base table\n# - creates the _installs registry\n# - rebuilds all four FTS tables as contentless with install_id + source_id\n#\n# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on\n# its first run. The point of running this separately is SPEED: SQLite over\n# SMB is slow due to fsync semantics, and the FTS rebuild reads every row\n# of every base table. Running the rebuild locally on the NAS over SSH is\n# typically 5-10x faster.\n#\n# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.\n#\n# Usage\n# -----\n# On the NAS via SSH (recommended for archives > 1 GB):\n# ssh Adm1n@192.168.0.242\n# # copy this script over first, then:\n# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db\n#\n# On Mac (works but slower):\n# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db\n# # or with no arg to use the default Mac mount path:\n# ./screenpipe_fts_migrate.sh\n\nset -euo pipefail\n\nNAS_DB=\"${1:-/Volumes/screenpipe/archive.db}\"\n\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nSHARED_TABLES=(tags vision_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\" \"${SHARED_TABLES[@]}\")\nFTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\ntable_exists() {\n local count\n count=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';\")\n [ \"$count\" -gt 0 ]\n}\n\nstep() {\n printf \"\\n▶ %s\\n\" \"$*\"\n}\n\nrun_with_timer() {\n local label=\"$1\" sql=\"$2\"\n local start\n start=$(date +%s)\n printf \" %-44s \" \"$label\"\n if sqlite3 \"$NAS_DB\" \"$sql\" > /dev/null 2>&1; then\n local dur=$(( $(date +%s) - start ))\n printf \"✓ %dm%02ds\\n\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\"\n else\n printf \"✗ FAILED\\n\"\n sqlite3 \"$NAS_DB\" \"$sql\" # re-run to surface the error\n exit 1\n fi\n}\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\n[ -f \"$NAS_DB\" ] || { echo \"ERROR: $NAS_DB not found\"; exit 1; }\n\necho \"================================================\"\necho \"Screenpipe FTS migration\"\necho \"DB: $NAS_DB\"\necho \"Size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\n\n# ─── STEP 1: install registry ─────────────────────────────────────────────────\nstep \"Creating install registry\"\nrun_with_timer \"_installs table\" \"\nCREATE TABLE IF NOT EXISTS _installs (\n install_id TEXT PRIMARY KEY,\n install_seq INTEGER NOT NULL UNIQUE,\n first_seen TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\"\n\n# ─── STEP 2: install_id on base tables ────────────────────────────────────────\nstep \"Adding install_id to base tables\"\nLEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\nLEGACY_USED=false\nfor tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$tbl\"; then\n printf \" %-44s (table not present, skipping)\\n\" \"$tbl\"\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-44s adding (backfill %s rows)\\n\" \"$tbl\" \"$ROW_COUNT\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n [ \"$ROW_COUNT\" -gt \"0\" ] && LEGACY_USED=true\n else\n printf \" %-44s already present\\n\" \"$tbl\"\n fi\n if [ \"$tbl\" = \"vision_tags\" ]; then\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);\"\n else\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n fi\ndone\n\nif [ \"$LEGACY_USED\" = true ]; then\n sqlite3 \"$NAS_DB\" \"\n INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)\n VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');\n \"\nfi\n\n# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────\nOLD_FTS_DETECTED=false\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n SCHEMA_SQL=$(sqlite3 \"$NAS_DB\" \"SELECT sql FROM sqlite_master WHERE name='$fts';\")\n if echo \"$SCHEMA_SQL\" | grep -q \"content=\" || ! echo \"$SCHEMA_SQL\" | grep -q \"install_id\"; then\n OLD_FTS_DETECTED=true\n break\n fi\n fi\ndone\n\nif [ \"$OLD_FTS_DETECTED\" = false ]; then\n echo \"\"\n echo \"FTS tables already on the new schema — nothing to rebuild.\"\n echo \"Migration complete.\"\n exit 0\nfi\n\n# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────\nstep \"Rebuilding FTS tables (this is the slow part)\"\n\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n run_with_timer \"drop old $fts\" \"DROP TABLE $fts;\"\n fi\ndone\n\nrun_with_timer \"create frames_fts\" \"\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create elements_fts\" \"\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create ui_events_fts\" \"\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create audio_transcriptions_fts\" \"\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\n\n# Populate from base tables. The slow operations live here.\nif table_exists \"frames\"; then\n run_with_timer \"populate frames_fts\" \"\n INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM frames WHERE full_text IS NOT NULL AND full_text != '';\n \"\nfi\nif table_exists \"elements\"; then\n run_with_timer \"populate elements_fts\" \"\n INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)\n SELECT text, role, install_id, id, frame_id\n FROM elements WHERE text IS NOT NULL;\n \"\nfi\nif table_exists \"ui_events\"; then\n run_with_timer \"populate ui_events_fts\" \"\n INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM ui_events WHERE text_content IS NOT NULL;\n \"\nfi\nif table_exists \"audio_transcriptions\"; then\n run_with_timer \"populate audio_transcriptions_fts\" \"\n INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT transcription, COALESCE(device,''), speaker_id, install_id, id\n FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';\n \"\nfi\n\necho \"\"\necho \"================================================\"\necho \"Migration complete.\"\necho \"Final DB size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\necho \"\"\necho \"Sanity-check queries you can run:\"\necho \" sqlite3 $NAS_DB 'SELECT * FROM _installs;'\"\necho \" sqlite3 $NAS_DB \\\"SELECT sql FROM sqlite_master WHERE name='frames_fts';\\\"\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'\"","depth":29,"bounds":{"left":0.116023935,"top":0.0933759,"width":0.3148271,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 214, Col 74","depth":16,"bounds":{"left":0.84674203,"top":0.98244214,"width":0.03158245,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read summary consumer","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\n__pycache__\nreport.py\nsummary.py\n\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(for_date, limit=20)\n url_lines = \"\\n\".join(\n f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls\n )\n\n ui_rows = ui_event_summary(for_date)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"browser_urls\": url_lines or \"(no browser data)\",\n \"ui_events\": ui_lines or \"(no UI event data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read all pipe.md files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for f in /volume1/screenpipe/pipes/*/pipe.md; do echo \"=== $f ===\"; cat \"$f\"; echo; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: AI Habits\ndescription: \"How you use AI tools — patterns and insights\"\nicon: \"🤖\"\nfeatured: true\n---\n\nSearch my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## AI Tools Used\n- List each tool with approximate time spent (e.g. \"Claude: ~45min\")\n\n## What I Used Them For\n- For each tool: coding, writing, research, or brainstorming\n\n## Usage Patterns\n- Do I switch between tools? Use them in bursts or steadily?\n\n## Effectiveness\n- Which tool appeared alongside completed work vs. abandoned attempts\n\nIf no AI usage is found, say so clearly. End with: \"**Tip:** [one suggestion to use AI tools more effectively]\"\n\n=== /volume1/screenpipe/pipes/day-recap/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n\n=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.\n\n=== /volume1/screenpipe/pipes/standup-update/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Standup Update\ndescription: \"What you did, what's next, and any blockers\"\nicon: \"🏢\"\nfeatured: true\n---\n\nBased on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Yesterday\n- What I worked on (name specific projects, files, tools, PRs)\n\n## Today\n- What I will work on next (based on unfinished tasks and recent activity)\n\n## Blockers\n- Issues I hit — errors, slow builds, waiting on someone\n- If no blockers, write \"None\"\n\nKeep it under 150 words. Copy-paste ready for a team standup.\n\n=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Time Breakdown\ndescription: \"Where your time went — by app, project, and category\"\nicon: \"⏱\"\nfeatured: false\n---\n\nAnalyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.\n\nRead screenpipe skill first.\n\nUse this exact format with durations and percentages:\n\n## By Application\n- List each app with duration and percentage, sorted by time (e.g. \"VS Code: 2h 15min (28%)\")\n\n## By Category\n- Group into: coding, meetings, browsing, writing, communication, other\n- Show hours and percentage per category\n\n## By Project\n- Group related activities by project/topic. Name specific repos or tasks.\n\n## Productivity Score\n- Calculate: focused_work_hours / total_hours as a percentage\n- Focused = coding + writing. Unfocused = browsing + switching.\n\nEnd with: \"**Suggestion:** [one specific change to improve tomorrow's productivity]\"\n\n=== /volume1/screenpipe/pipes/video-export/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Export Video Clip\ndescription: \"Create a video of your recent screen activity\"\nicon: \"🎬\"\nfeatured: false\n---\n\nExport a video of my screen activity from the last 5 minutes.\n\nRead screenpipe skill first.\n\nUse the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.\n\nIf the export is large, suggest a lower fps or shorter time range.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a clear picture. The pipes are markdown prompt templates in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/pipes/","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", but there's no code to actually load and run them —","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/summary.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"has its own hardcoded prompts instead.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Here's what I'll implement:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/pipes.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— two new endpoints:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /api/pipes","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"POST /api/pipes/{pipe_id}/run","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"command to run pipes from the terminal","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me build it:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check browser_urls signature","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/app/consumers/activity.py | grep \"def browser_urls\" -A 5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"def browser_urls(\n for_date: date | None = None,\n app_name: str | None = None,\n ts_from: str | None = None,\n ts_to: str | None = None,\n limit: int = 30,","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"pipes.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pipes.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"143 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"Dynamic pipe loader and runner.\"\"\"\nimport os\nimport re\nfrom datetime import date\nfrom pathlib import Path\nfrom typing import Any\n\n\ndef _parse_frontmatter(text: str) -> tuple[dict, str]:\n if not text.startswith(\"---\"):\n return {}, text\n try:\n end = text.index(\"---\", 3)\n except ValueError:\n return {}, text\n fm_text = text[3:end].strip()\n body = text[end + 3:].strip()\n meta: dict = {}\n for line in fm_text.splitlines():\n if \":\" in line:\n k, _, v = line.partition(\":\")\n meta[k.strip()] = v.strip().strip('\"')\n return meta, body\n\n\ndef load_pipes(pipes_dir: Path) -> list[dict]:\n if not pipes_dir.exists():\n return []\n pipes = []\n for pipe_dir in sorted(pipes_dir.iterdir()):\n if not pipe_dir.is_dir() or pipe_dir.name.startswith(\".\"):\n continue\n pipe_md = pipe_dir / \"pipe.md\"\n if not pipe_md.exists():\n continue\n text = pipe_md.read_text(encoding=\"utf-8\")\n meta, body = _parse_frontmatter(text)\n if meta.get(\"enabled\", \"true\").lower() == \"false\":\n continue\n body = re.sub(r\"Read screenpipe skill first\\.?\\n?\", \"\", body).strip()\n pipes.append({\n \"id\": pipe_dir.name,\n \"title\": meta.get(\"title\", pipe_dir.name),\n \"description\": meta.get(\"description\", \"\"),\n \"icon\": meta.get(\"icon\", \"\"),\n \"schedule\": meta.get(\"schedule\", \"manual\"),\n \"featured\": meta.get(\"featured\", \"false\").lower() == \"true\",\n \"prompt\": body,\n })\n return pipes\n\n\ndef _build_system(d: date, stats: dict) -> str:\n from consumers.activity import app_time, browser_urls, ui_event_summary\n from consumers.ocr import deduplicated_text\n from consumers.audio import formatted_transcript\n\n apps = app_time(d)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(d, limit=20)\n url_lines = \"\\n\".join(f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls)\n\n ui_rows = ui_event_summary(d)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(d, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(d)\n if len(audio) > 3000:\n audio = audio[:3000]\n\n return f\"\"\"You are analyzing screenpipe data — recordings of a person's computer activity.\n\n## App usage (minutes per app):\n{app_lines or '(no app data)'}\n\n## Browser URLs visited:\n{url_lines or '(no browser data)'}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_lines or '(no UI event data)'}\n\n## Screen content (sampled every 5 minutes):\n{ocr_lines or '(no screen data)'}\n\n## Audio / speech:\n{audio or '(no audio data)'}\n\nDate: {d}\nTotal frames recorded: {stats['total_frames']}\"\"\"\n\n\ndef run_pipe(\n pipe_id: str,\n for_date: date | None = None,\n api_key: str | None = None,\n pipes_dir: Path | None = None,\n) -> dict[str, Any]:\n import anthropic\n from consumers.activity import summary_stats\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\"title\": \"Error\", \"content\": \"ANTHROPIC_API_KEY not set.\", \"date\": str(d)}\n\n _pipes_dir = pipes_dir or Path(os.environ.get(\"PIPES_DIR\", \"/data/pipes\"))\n all_pipes = {p[\"id\"]: p for p in load_pipes(_pipes_dir)}\n\n if pipe_id not in all_pipes:\n return {\"title\": \"Error\", \"content\": f\"Pipe not found: {pipe_id}\", \"date\": str(d)}\n\n pipe = all_pipes[pipe_id]\n stats = summary_stats(d)\n\n if stats[\"total_frames\"] == 0:\n return {\"title\": pipe[\"title\"], \"content\": f\"No screen data found for {d}.\", \"date\": str(d)}\n\n system = _build_system(d, stats)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n system=system,\n messages=[{\"role\": \"user\", \"content\": pipe[\"prompt\"]}],\n )\n\n return {\n \"title\": pipe[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the API endpoints to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"}]...
|
-3177610253016011030
|
-8484555567517672640
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 214, Col 74
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/
, but there's no code to actually load and run them —
consumers/summary.py
has its own hardcoded prompts instead.
Here's what I'll implement:
consumers/pipes.py
— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)
main.py
— two new endpoints:
GET /api/pipes
and
POST /api/pipes/{pipe_id}/run
cli.py
— a
pipe
command to run pipes from the terminal
Let me build it:
Bash
Check browser_urls signature
IN
cat /volume1/screenpipe/app/consumers/activity.py | grep "def browser_urls" -A 5
Copy code to clipboard
OUT
def browser_urls(
for_date: date | None = None,
app_name: str | None = None,
ts_from: str | None = None,
ts_to: str | None = None,
limit: int = 30,
Write
pipes.py
pipes.py
143 lines
"""Dynamic pipe loader and runner."""
import os
import re
from datetime import date
from pathlib import Path
from typing import Any
def _parse_frontmatter(text: str) -> tuple[dict, str]:
if not text.startswith("---"):
return {}, text
try:
end = text.index("---", 3)
except ValueError:
return {}, text
fm_text = text[3:end].strip()
body = text[end + 3:].strip()
meta: dict = {}
for line in fm_text.splitlines():
if ":" in line:
k, _, v = line.partition(":")
meta[k.strip()] = v.strip().strip('"')
return meta, body
def load_pipes(pipes_dir: Path) -> list[dict]:
if not pipes_dir.exists():
return []
pipes = []
for pipe_dir in sorted(pipes_dir.iterdir()):
if not pipe_dir.is_dir() or pipe_dir.name.startswith("."):
continue
pipe_md = pipe_dir / "pipe.md"
if not pipe_md.exists():
continue
text = pipe_md.read_text(encoding="utf-8")
meta, body = _parse_frontmatter(text)
if meta.get("enabled", "true").lower() == "false":
continue
body = re.sub(r"Read screenpipe skill first\.?\n?", "", body).strip()
pipes.append({
"id": pipe_dir.name,
"title": meta.get("title", pipe_dir.name),
"description": meta.get("description", ""),
"icon": meta.get("icon", ""),
"schedule": meta.get("schedule", "manual"),
"featured": meta.get("featured", "false").lower() == "true",
"prompt": body,
})
return pipes
def _build_system(d: date, stats: dict) -> str:
from consumers.activity import app_time, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
apps = app_time(d)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(d, limit=20)
url_lines = "\n".join(f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls)
ui_rows = ui_event_summary(d)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(d, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(d)
if len(audio) > 3000:
audio = audio[:3000]
return f"""You are analyzing screenpipe data — recordings of a person's computer activity.
## App usage (minutes per app):
{app_lines or '(no app data)'}
## Browser URLs visited:
{url_lines or '(no browser data)'}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_lines or '(no UI event data)'}
## Screen content (sampled every 5 minutes):
{ocr_lines or '(no screen data)'}
## Audio / speech:
{audio or '(no audio data)'}
Date: {d}
Total frames recorded: {stats['total_frames']}"""
def run_pipe(
pipe_id: str,
for_date: date | None = None,
api_key: str | None = None,
pipes_dir: Path | None = None,
) -> dict[str, Any]:
import anthropic
from consumers.activity import summary_stats
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {"title": "Error", "content": "ANTHROPIC_API_KEY not set.", "date": str(d)}
_pipes_dir = pipes_dir or Path(os.environ.get("PIPES_DIR", "/data/pipes"))
all_pipes = {p["id"]: p for p in load_pipes(_pipes_dir)}
if pipe_id not in all_pipes:
return {"title": "Error", "content": f"Pipe not found: {pipe_id}", "date": str(d)}
pipe = all_pipes[pipe_id]
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {"title": pipe["title"], "content": f"No screen data found for {d}.", "date": str(d)}
system = _build_system(d, stats)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
system=system,
messages=[{"role": "user", "content": pipe["prompt"]}],
)
return {
"title": pipe["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Now add the API endpoints to
main.py
:...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26200
|
1088
|
15
|
2026-05-12T12:13:17.952790+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587997952_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 204, Col 8
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_fts_migrate.sh\n# One-shot migration of the screenpipe NAS archive DB to the new schema:\n# - adds install_id column to every synced base table\n# - creates the _installs registry\n# - rebuilds all four FTS tables as contentless with install_id + source_id\n#\n# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on\n# its first run. The point of running this separately is SPEED: SQLite over\n# SMB is slow due to fsync semantics, and the FTS rebuild reads every row\n# of every base table. Running the rebuild locally on the NAS over SSH is\n# typically 5-10x faster.\n#\n# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.\n#\n# Usage\n# -----\n# On the NAS via SSH (recommended for archives > 1 GB):\n# ssh Adm1n@192.168.0.242\n# # copy this script over first, then:\n# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db\n#\n# On Mac (works but slower):\n# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db\n# # or with no arg to use the default Mac mount path:\n# ./screenpipe_fts_migrate.sh\n\nset -euo pipefail\n\nNAS_DB=\"${1:-/Volumes/screenpipe/archive.db}\"\n\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nSHARED_TABLES=(tags vision_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\" \"${SHARED_TABLES[@]}\")\nFTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\ntable_exists() {\n local count\n count=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';\")\n [ \"$count\" -gt 0 ]\n}\n\nstep() {\n printf \"\\n▶ %s\\n\" \"$*\"\n}\n\nrun_with_timer() {\n local label=\"$1\" sql=\"$2\"\n local start\n start=$(date +%s)\n printf \" %-44s \" \"$label\"\n if sqlite3 \"$NAS_DB\" \"$sql\" > /dev/null 2>&1; then\n local dur=$(( $(date +%s) - start ))\n printf \"✓ %dm%02ds\\n\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\"\n else\n printf \"✗ FAILED\\n\"\n sqlite3 \"$NAS_DB\" \"$sql\" # re-run to surface the error\n exit 1\n fi\n}\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\n[ -f \"$NAS_DB\" ] || { echo \"ERROR: $NAS_DB not found\"; exit 1; }\n\necho \"================================================\"\necho \"Screenpipe FTS migration\"\necho \"DB: $NAS_DB\"\necho \"Size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\n\n# ─── STEP 1: install registry ─────────────────────────────────────────────────\nstep \"Creating install registry\"\nrun_with_timer \"_installs table\" \"\nCREATE TABLE IF NOT EXISTS _installs (\n install_id TEXT PRIMARY KEY,\n install_seq INTEGER NOT NULL UNIQUE,\n first_seen TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\"\n\n# ─── STEP 2: install_id on base tables ────────────────────────────────────────\nstep \"Adding install_id to base tables\"\nLEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\nLEGACY_USED=false\nfor tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$tbl\"; then\n printf \" %-44s (table not present, skipping)\\n\" \"$tbl\"\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-44s adding (backfill %s rows)\\n\" \"$tbl\" \"$ROW_COUNT\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n [ \"$ROW_COUNT\" -gt \"0\" ] && LEGACY_USED=true\n else\n printf \" %-44s already present\\n\" \"$tbl\"\n fi\n if [ \"$tbl\" = \"vision_tags\" ]; then\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);\"\n else\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n fi\ndone\n\nif [ \"$LEGACY_USED\" = true ]; then\n sqlite3 \"$NAS_DB\" \"\n INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)\n VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');\n \"\nfi\n\n# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────\nOLD_FTS_DETECTED=false\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n SCHEMA_SQL=$(sqlite3 \"$NAS_DB\" \"SELECT sql FROM sqlite_master WHERE name='$fts';\")\n if echo \"$SCHEMA_SQL\" | grep -q \"content=\" || ! echo \"$SCHEMA_SQL\" | grep -q \"install_id\"; then\n OLD_FTS_DETECTED=true\n break\n fi\n fi\ndone\n\nif [ \"$OLD_FTS_DETECTED\" = false ]; then\n echo \"\"\n echo \"FTS tables already on the new schema — nothing to rebuild.\"\n echo \"Migration complete.\"\n exit 0\nfi\n\n# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────\nstep \"Rebuilding FTS tables (this is the slow part)\"\n\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n run_with_timer \"drop old $fts\" \"DROP TABLE $fts;\"\n fi\ndone\n\nrun_with_timer \"create frames_fts\" \"\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create elements_fts\" \"\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create ui_events_fts\" \"\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create audio_transcriptions_fts\" \"\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\n\n# Populate from base tables. The slow operations live here.\nif table_exists \"frames\"; then\n run_with_timer \"populate frames_fts\" \"\n INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM frames WHERE full_text IS NOT NULL AND full_text != '';\n \"\nfi\nif table_exists \"elements\"; then\n run_with_timer \"populate elements_fts\" \"\n INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)\n SELECT text, role, install_id, id, frame_id\n FROM elements WHERE text IS NOT NULL;\n \"\nfi\nif table_exists \"ui_events\"; then\n run_with_timer \"populate ui_events_fts\" \"\n INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM ui_events WHERE text_content IS NOT NULL;\n \"\nfi\nif table_exists \"audio_transcriptions\"; then\n run_with_timer \"populate audio_transcriptions_fts\" \"\n INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT transcription, COALESCE(device,''), speaker_id, install_id, id\n FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';\n \"\nfi\n\necho \"\"\necho \"================================================\"\necho \"Migration complete.\"\necho \"Final DB size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\necho \"\"\necho \"Sanity-check queries you can run:\"\necho \" sqlite3 $NAS_DB 'SELECT * FROM _installs;'\"\necho \" sqlite3 $NAS_DB \\\"SELECT sql FROM sqlite_master WHERE name='frames_fts';\\\"\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'\"","depth":28,"on_screen":true,"value":"#!/bin/bash\n# screenpipe_fts_migrate.sh\n# One-shot migration of the screenpipe NAS archive DB to the new schema:\n# - adds install_id column to every synced base table\n# - creates the _installs registry\n# - rebuilds all four FTS tables as contentless with install_id + source_id\n#\n# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on\n# its first run. The point of running this separately is SPEED: SQLite over\n# SMB is slow due to fsync semantics, and the FTS rebuild reads every row\n# of every base table. Running the rebuild locally on the NAS over SSH is\n# typically 5-10x faster.\n#\n# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.\n#\n# Usage\n# -----\n# On the NAS via SSH (recommended for archives > 1 GB):\n# ssh Adm1n@192.168.0.242\n# # copy this script over first, then:\n# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db\n#\n# On Mac (works but slower):\n# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db\n# # or with no arg to use the default Mac mount path:\n# ./screenpipe_fts_migrate.sh\n\nset -euo pipefail\n\nNAS_DB=\"${1:-/Volumes/screenpipe/archive.db}\"\n\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nSHARED_TABLES=(tags vision_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\" \"${SHARED_TABLES[@]}\")\nFTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\ntable_exists() {\n local count\n count=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';\")\n [ \"$count\" -gt 0 ]\n}\n\nstep() {\n printf \"\\n▶ %s\\n\" \"$*\"\n}\n\nrun_with_timer() {\n local label=\"$1\" sql=\"$2\"\n local start\n start=$(date +%s)\n printf \" %-44s \" \"$label\"\n if sqlite3 \"$NAS_DB\" \"$sql\" > /dev/null 2>&1; then\n local dur=$(( $(date +%s) - start ))\n printf \"✓ %dm%02ds\\n\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\"\n else\n printf \"✗ FAILED\\n\"\n sqlite3 \"$NAS_DB\" \"$sql\" # re-run to surface the error\n exit 1\n fi\n}\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\n[ -f \"$NAS_DB\" ] || { echo \"ERROR: $NAS_DB not found\"; exit 1; }\n\necho \"================================================\"\necho \"Screenpipe FTS migration\"\necho \"DB: $NAS_DB\"\necho \"Size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\n\n# ─── STEP 1: install registry ─────────────────────────────────────────────────\nstep \"Creating install registry\"\nrun_with_timer \"_installs table\" \"\nCREATE TABLE IF NOT EXISTS _installs (\n install_id TEXT PRIMARY KEY,\n install_seq INTEGER NOT NULL UNIQUE,\n first_seen TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\"\n\n# ─── STEP 2: install_id on base tables ────────────────────────────────────────\nstep \"Adding install_id to base tables\"\nLEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\nLEGACY_USED=false\nfor tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$tbl\"; then\n printf \" %-44s (table not present, skipping)\\n\" \"$tbl\"\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-44s adding (backfill %s rows)\\n\" \"$tbl\" \"$ROW_COUNT\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n [ \"$ROW_COUNT\" -gt \"0\" ] && LEGACY_USED=true\n else\n printf \" %-44s already present\\n\" \"$tbl\"\n fi\n if [ \"$tbl\" = \"vision_tags\" ]; then\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);\"\n else\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n fi\ndone\n\nif [ \"$LEGACY_USED\" = true ]; then\n sqlite3 \"$NAS_DB\" \"\n INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)\n VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');\n \"\nfi\n\n# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────\nOLD_FTS_DETECTED=false\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n SCHEMA_SQL=$(sqlite3 \"$NAS_DB\" \"SELECT sql FROM sqlite_master WHERE name='$fts';\")\n if echo \"$SCHEMA_SQL\" | grep -q \"content=\" || ! echo \"$SCHEMA_SQL\" | grep -q \"install_id\"; then\n OLD_FTS_DETECTED=true\n break\n fi\n fi\ndone\n\nif [ \"$OLD_FTS_DETECTED\" = false ]; then\n echo \"\"\n echo \"FTS tables already on the new schema — nothing to rebuild.\"\n echo \"Migration complete.\"\n exit 0\nfi\n\n# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────\nstep \"Rebuilding FTS tables (this is the slow part)\"\n\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n run_with_timer \"drop old $fts\" \"DROP TABLE $fts;\"\n fi\ndone\n\nrun_with_timer \"create frames_fts\" \"\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create elements_fts\" \"\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create ui_events_fts\" \"\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create audio_transcriptions_fts\" \"\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\n\n# Populate from base tables. The slow operations live here.\nif table_exists \"frames\"; then\n run_with_timer \"populate frames_fts\" \"\n INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM frames WHERE full_text IS NOT NULL AND full_text != '';\n \"\nfi\nif table_exists \"elements\"; then\n run_with_timer \"populate elements_fts\" \"\n INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)\n SELECT text, role, install_id, id, frame_id\n FROM elements WHERE text IS NOT NULL;\n \"\nfi\nif table_exists \"ui_events\"; then\n run_with_timer \"populate ui_events_fts\" \"\n INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM ui_events WHERE text_content IS NOT NULL;\n \"\nfi\nif table_exists \"audio_transcriptions\"; then\n run_with_timer \"populate audio_transcriptions_fts\" \"\n INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT transcription, COALESCE(device,''), speaker_id, install_id, id\n FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';\n \"\nfi\n\necho \"\"\necho \"================================================\"\necho \"Migration complete.\"\necho \"Final DB size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\necho \"\"\necho \"Sanity-check queries you can run:\"\necho \" sqlite3 $NAS_DB 'SELECT * FROM _installs;'\"\necho \" sqlite3 $NAS_DB \\\"SELECT sql FROM sqlite_master WHERE name='frames_fts';\\\"\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'\"","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_fts_migrate.sh\n# One-shot migration of the screenpipe NAS archive DB to the new schema:\n# - adds install_id column to every synced base table\n# - creates the _installs registry\n# - rebuilds all four FTS tables as contentless with install_id + source_id\n#\n# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on\n# its first run. The point of running this separately is SPEED: SQLite over\n# SMB is slow due to fsync semantics, and the FTS rebuild reads every row\n# of every base table. Running the rebuild locally on the NAS over SSH is\n# typically 5-10x faster.\n#\n# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.\n#\n# Usage\n# -----\n# On the NAS via SSH (recommended for archives > 1 GB):\n# ssh Adm1n@192.168.0.242\n# # copy this script over first, then:\n# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db\n#\n# On Mac (works but slower):\n# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db\n# # or with no arg to use the default Mac mount path:\n# ./screenpipe_fts_migrate.sh\n\nset -euo pipefail\n\nNAS_DB=\"${1:-/Volumes/screenpipe/archive.db}\"\n\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nSHARED_TABLES=(tags vision_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\" \"${SHARED_TABLES[@]}\")\nFTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\ntable_exists() {\n local count\n count=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';\")\n [ \"$count\" -gt 0 ]\n}\n\nstep() {\n printf \"\\n▶ %s\\n\" \"$*\"\n}\n\nrun_with_timer() {\n local label=\"$1\" sql=\"$2\"\n local start\n start=$(date +%s)\n printf \" %-44s \" \"$label\"\n if sqlite3 \"$NAS_DB\" \"$sql\" > /dev/null 2>&1; then\n local dur=$(( $(date +%s) - start ))\n printf \"✓ %dm%02ds\\n\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\"\n else\n printf \"✗ FAILED\\n\"\n sqlite3 \"$NAS_DB\" \"$sql\" # re-run to surface the error\n exit 1\n fi\n}\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\n[ -f \"$NAS_DB\" ] || { echo \"ERROR: $NAS_DB not found\"; exit 1; }\n\necho \"================================================\"\necho \"Screenpipe FTS migration\"\necho \"DB: $NAS_DB\"\necho \"Size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\n\n# ─── STEP 1: install registry ─────────────────────────────────────────────────\nstep \"Creating install registry\"\nrun_with_timer \"_installs table\" \"\nCREATE TABLE IF NOT EXISTS _installs (\n install_id TEXT PRIMARY KEY,\n install_seq INTEGER NOT NULL UNIQUE,\n first_seen TEXT NOT NULL DEFAULT (datetime('now')),\n last_seen TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\"\n\n# ─── STEP 2: install_id on base tables ────────────────────────────────────────\nstep \"Adding install_id to base tables\"\nLEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\nLEGACY_USED=false\nfor tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$tbl\"; then\n printf \" %-44s (table not present, skipping)\\n\" \"$tbl\"\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-44s adding (backfill %s rows)\\n\" \"$tbl\" \"$ROW_COUNT\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n [ \"$ROW_COUNT\" -gt \"0\" ] && LEGACY_USED=true\n else\n printf \" %-44s already present\\n\" \"$tbl\"\n fi\n if [ \"$tbl\" = \"vision_tags\" ]; then\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);\"\n else\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n fi\ndone\n\nif [ \"$LEGACY_USED\" = true ]; then\n sqlite3 \"$NAS_DB\" \"\n INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)\n VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');\n \"\nfi\n\n# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────\nOLD_FTS_DETECTED=false\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n SCHEMA_SQL=$(sqlite3 \"$NAS_DB\" \"SELECT sql FROM sqlite_master WHERE name='$fts';\")\n if echo \"$SCHEMA_SQL\" | grep -q \"content=\" || ! echo \"$SCHEMA_SQL\" | grep -q \"install_id\"; then\n OLD_FTS_DETECTED=true\n break\n fi\n fi\ndone\n\nif [ \"$OLD_FTS_DETECTED\" = false ]; then\n echo \"\"\n echo \"FTS tables already on the new schema — nothing to rebuild.\"\n echo \"Migration complete.\"\n exit 0\nfi\n\n# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────\nstep \"Rebuilding FTS tables (this is the slow part)\"\n\nfor fts in \"${FTS_TABLES[@]}\"; do\n if table_exists \"$fts\"; then\n run_with_timer \"drop old $fts\" \"DROP TABLE $fts;\"\n fi\ndone\n\nrun_with_timer \"create frames_fts\" \"\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create elements_fts\" \"\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create ui_events_fts\" \"\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\nrun_with_timer \"create audio_transcriptions_fts\" \"\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\n\"\n\n# Populate from base tables. The slow operations live here.\nif table_exists \"frames\"; then\n run_with_timer \"populate frames_fts\" \"\n INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM frames WHERE full_text IS NOT NULL AND full_text != '';\n \"\nfi\nif table_exists \"elements\"; then\n run_with_timer \"populate elements_fts\" \"\n INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)\n SELECT text, role, install_id, id, frame_id\n FROM elements WHERE text IS NOT NULL;\n \"\nfi\nif table_exists \"ui_events\"; then\n run_with_timer \"populate ui_events_fts\" \"\n INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM ui_events WHERE text_content IS NOT NULL;\n \"\nfi\nif table_exists \"audio_transcriptions\"; then\n run_with_timer \"populate audio_transcriptions_fts\" \"\n INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT transcription, COALESCE(device,''), speaker_id, install_id, id\n FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';\n \"\nfi\n\necho \"\"\necho \"================================================\"\necho \"Migration complete.\"\necho \"Final DB size: $(du -sh \"$NAS_DB\" | cut -f1)\"\necho \"================================================\"\necho \"\"\necho \"Sanity-check queries you can run:\"\necho \" sqlite3 $NAS_DB 'SELECT * FROM _installs;'\"\necho \" sqlite3 $NAS_DB \\\"SELECT sql FROM sqlite_master WHERE name='frames_fts';\\\"\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'\"\necho \" sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'\"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 204, Col 8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4437776039141255794
|
-6711395148629378237
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
#!/bin/bash
# screenpipe_fts_migrate.sh
# One-shot migration of the screenpipe NAS archive DB to the new schema:
# - adds install_id column to every synced base table
# - creates the _installs registry
# - rebuilds all four FTS tables as contentless with install_id + source_id
#
# This is OPTIONAL. screenpipe_sync.sh performs the same migration inline on
# its first run. The point of running this separately is SPEED: SQLite over
# SMB is slow due to fsync semantics, and the FTS rebuild reads every row
# of every base table. Running the rebuild locally on the NAS over SSH is
# typically 5-10x faster.
#
# Idempotent — safe to re-run. Detects the new schema and exits if already migrated.
#
# Usage
# -----
# On the NAS via SSH (recommended for archives > 1 GB):
# ssh Adm1n@[IP_ADDRESS]
# # copy this script over first, then:
# ./screenpipe_fts_migrate.sh /volume1/Test/screenpipe/archive.db
#
# On Mac (works but slower):
# ./screenpipe_fts_migrate.sh /Volumes/screenpipe/archive.db
# # or with no arg to use the default Mac mount path:
# ./screenpipe_fts_migrate.sh
set -euo pipefail
NAS_DB="${1:-/Volumes/screenpipe/archive.db}"
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
SHARED_TABLES=(tags vision_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}" "${SHARED_TABLES[@]}")
FTS_TABLES=(frames_fts elements_fts ui_events_fts audio_transcriptions_fts)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
table_exists() {
local count
count=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$1';")
[ "$count" -gt 0 ]
}
step() {
printf "\n▶ %s\n" "$*"
}
run_with_timer() {
local label="$1" sql="$2"
local start
start=$(date +%s)
printf " %-44s " "$label"
if sqlite3 "$NAS_DB" "$sql" > /dev/null 2>&1; then
local dur=$(( $(date +%s) - start ))
printf "✓ %dm%02ds\n" "$(( dur / 60 ))" "$(( dur % 60 ))"
else
printf "✗ FAILED\n"
sqlite3 "$NAS_DB" "$sql" # re-run to surface the error
exit 1
fi
}
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
[ -f "$NAS_DB" ] || { echo "ERROR: $NAS_DB not found"; exit 1; }
echo "================================================"
echo "Screenpipe FTS migration"
echo "DB: $NAS_DB"
echo "Size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
# ─── STEP 1: install registry ─────────────────────────────────────────────────
step "Creating install registry"
run_with_timer "_installs table" "
CREATE TABLE IF NOT EXISTS _installs (
install_id TEXT PRIMARY KEY,
install_seq INTEGER NOT NULL UNIQUE,
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
last_seen TEXT NOT NULL DEFAULT (datetime('now'))
);
"
# ─── STEP 2: install_id on base tables ────────────────────────────────────────
step "Adding install_id to base tables"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
LEGACY_USED=false
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$tbl"; then
printf " %-44s (table not present, skipping)\n" "$tbl"
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-44s adding (backfill %s rows)\n" "$tbl" "$ROW_COUNT"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
[ "$ROW_COUNT" -gt "0" ] && LEGACY_USED=true
else
printf " %-44s already present\n" "$tbl"
fi
if [ "$tbl" = "vision_tags" ]; then
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_vision_tags_install_pk ON vision_tags(install_id, vision_id, tag_id);"
else
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
fi
done
if [ "$LEGACY_USED" = true ]; then
sqlite3 "$NAS_DB" "
INSERT OR IGNORE INTO _installs(install_id, install_seq, first_seen, last_seen)
VALUES ('$LEGACY_TAG', (SELECT COALESCE(MAX(install_seq),0)+1 FROM _installs), 'pre-migration', 'pre-migration');
"
fi
# ─── STEP 3: detect old FTS ───────────────────────────────────────────────────
OLD_FTS_DETECTED=false
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
SCHEMA_SQL=$(sqlite3 "$NAS_DB" "SELECT sql FROM sqlite_master WHERE name='$fts';")
if echo "$SCHEMA_SQL" | grep -q "content=" || ! echo "$SCHEMA_SQL" | grep -q "install_id"; then
OLD_FTS_DETECTED=true
break
fi
fi
done
if [ "$OLD_FTS_DETECTED" = false ]; then
echo ""
echo "FTS tables already on the new schema — nothing to rebuild."
echo "Migration complete."
exit 0
fi
# ─── STEP 4: rebuild FTS tables ───────────────────────────────────────────────
step "Rebuilding FTS tables (this is the slow part)"
for fts in "${FTS_TABLES[@]}"; do
if table_exists "$fts"; then
run_with_timer "drop old $fts" "DROP TABLE $fts;"
fi
done
run_with_timer "create frames_fts" "
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create elements_fts" "
CREATE VIRTUAL TABLE elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create ui_events_fts" "
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
run_with_timer "create audio_transcriptions_fts" "
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
"
# Populate from base tables. The slow operations live here.
if table_exists "frames"; then
run_with_timer "populate frames_fts" "
INSERT INTO frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM frames WHERE full_text IS NOT NULL AND full_text != '';
"
fi
if table_exists "elements"; then
run_with_timer "populate elements_fts" "
INSERT INTO elements_fts(text, role, install_id, source_id, frame_id)
SELECT text, role, install_id, id, frame_id
FROM elements WHERE text IS NOT NULL;
"
fi
if table_exists "ui_events"; then
run_with_timer "populate ui_events_fts" "
INSERT INTO ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM ui_events WHERE text_content IS NOT NULL;
"
fi
if table_exists "audio_transcriptions"; then
run_with_timer "populate audio_transcriptions_fts" "
INSERT INTO audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT transcription, COALESCE(device,''), speaker_id, install_id, id
FROM audio_transcriptions WHERE transcription IS NOT NULL AND transcription != '';
"
fi
echo ""
echo "================================================"
echo "Migration complete."
echo "Final DB size: $(du -sh "$NAS_DB" | cut -f1)"
echo "================================================"
echo ""
echo "Sanity-check queries you can run:"
echo " sqlite3 $NAS_DB 'SELECT * FROM _installs;'"
echo " sqlite3 $NAS_DB \"SELECT sql FROM sqlite_master WHERE name='frames_fts';\""
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM frames_fts;'"
echo " sqlite3 $NAS_DB 'SELECT COUNT(*) FROM audio_transcriptions_fts;'"
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 204, Col 8
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history...
|
26199
|
NULL
|
NULL
|
NULL
|
|
26201
|
1088
|
16
|
2026-05-12T12:13:19.847242+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587999847_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 674, Col 18
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 674, Col 18","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2938505165460197960
|
2609930024178060693
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 674, Col 18
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26202
|
1089
|
21
|
2026-05-12T12:13:19.868754+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587999868_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 674, Col 18
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/
, but there's no code to actually load and run them —
consumers/summary.py
has its own hardcoded prompts instead.
Here's what I'll implement:
consumers/pipes.py
— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)
main.py
— two new endpoints:
GET /api/pipes
and
POST /api/pipes/{pipe_id}/run
cli.py
— a
pipe
command to run pipes from the terminal
Let me build it:
Bash
Check browser_urls signature
IN
cat /volume1/screenpipe/app/consumers/activity.py | grep "def browser_urls" -A 5
Copy code to clipboard
OUT
def browser_urls(
for_date: date | None = None,
app_name: str | None = None,
ts_from: str | None = None,
ts_to: str | None = None,
limit: int = 30,...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.33998403,"width":0.38031915,"height":0.014365523},"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.33998403,"width":0.38031915,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 674, Col 18","depth":16,"bounds":{"left":0.84674203,"top":0.98244214,"width":0.03158245,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"bounds":{"left":0.79920214,"top":0.98244214,"width":0.045877658,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.80086434,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"bounds":{"left":0.8061835,"top":0.9856345,"width":0.03723404,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read summary consumer","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\n__pycache__\nreport.py\nsummary.py\n\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(for_date, limit=20)\n url_lines = \"\\n\".join(\n f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls\n )\n\n ui_rows = ui_event_summary(for_date)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"browser_urls\": url_lines or \"(no browser data)\",\n \"ui_events\": ui_lines or \"(no UI event data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read all pipe.md files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for f in /volume1/screenpipe/pipes/*/pipe.md; do echo \"=== $f ===\"; cat \"$f\"; echo; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: AI Habits\ndescription: \"How you use AI tools — patterns and insights\"\nicon: \"🤖\"\nfeatured: true\n---\n\nSearch my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## AI Tools Used\n- List each tool with approximate time spent (e.g. \"Claude: ~45min\")\n\n## What I Used Them For\n- For each tool: coding, writing, research, or brainstorming\n\n## Usage Patterns\n- Do I switch between tools? Use them in bursts or steadily?\n\n## Effectiveness\n- Which tool appeared alongside completed work vs. abandoned attempts\n\nIf no AI usage is found, say so clearly. End with: \"**Tip:** [one suggestion to use AI tools more effectively]\"\n\n=== /volume1/screenpipe/pipes/day-recap/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n\n=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.\n\n=== /volume1/screenpipe/pipes/standup-update/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Standup Update\ndescription: \"What you did, what's next, and any blockers\"\nicon: \"🏢\"\nfeatured: true\n---\n\nBased on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Yesterday\n- What I worked on (name specific projects, files, tools, PRs)\n\n## Today\n- What I will work on next (based on unfinished tasks and recent activity)\n\n## Blockers\n- Issues I hit — errors, slow builds, waiting on someone\n- If no blockers, write \"None\"\n\nKeep it under 150 words. Copy-paste ready for a team standup.\n\n=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Time Breakdown\ndescription: \"Where your time went — by app, project, and category\"\nicon: \"⏱\"\nfeatured: false\n---\n\nAnalyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.\n\nRead screenpipe skill first.\n\nUse this exact format with durations and percentages:\n\n## By Application\n- List each app with duration and percentage, sorted by time (e.g. \"VS Code: 2h 15min (28%)\")\n\n## By Category\n- Group into: coding, meetings, browsing, writing, communication, other\n- Show hours and percentage per category\n\n## By Project\n- Group related activities by project/topic. Name specific repos or tasks.\n\n## Productivity Score\n- Calculate: focused_work_hours / total_hours as a percentage\n- Focused = coding + writing. Unfocused = browsing + switching.\n\nEnd with: \"**Suggestion:** [one specific change to improve tomorrow's productivity]\"\n\n=== /volume1/screenpipe/pipes/video-export/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Export Video Clip\ndescription: \"Create a video of your recent screen activity\"\nicon: \"🎬\"\nfeatured: false\n---\n\nExport a video of my screen activity from the last 5 minutes.\n\nRead screenpipe skill first.\n\nUse the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.\n\nIf the export is large, suggest a lower fps or shorter time range.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a clear picture. The pipes are markdown prompt templates in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/pipes/","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", but there's no code to actually load and run them —","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/summary.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"has its own hardcoded prompts instead.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Here's what I'll implement:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/pipes.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— two new endpoints:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /api/pipes","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"POST /api/pipes/{pipe_id}/run","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"command to run pipes from the terminal","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me build it:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check browser_urls signature","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/app/consumers/activity.py | grep \"def browser_urls\" -A 5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"def browser_urls(\n for_date: date | None = None,\n app_name: str | None = None,\n ts_from: str | None = None,\n ts_to: str | None = None,\n limit: int = 30,","depth":25,"on_screen":false,"role_description":"text"}]...
|
-3218342453944354130
|
-8905369573243253260
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 674, Col 18
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/
, but there's no code to actually load and run them —
consumers/summary.py
has its own hardcoded prompts instead.
Here's what I'll implement:
consumers/pipes.py
— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)
main.py
— two new endpoints:
GET /api/pipes
and
POST /api/pipes/{pipe_id}/run
cli.py
— a
pipe
command to run pipes from the terminal
Let me build it:
Bash
Check browser_urls signature
IN
cat /volume1/screenpipe/app/consumers/activity.py | grep "def browser_urls" -A 5
Copy code to clipboard
OUT
def browser_urls(
for_date: date | None = None,
app_name: str | None = None,
ts_from: str | None = None,
ts_to: str | None = None,
limit: int = 30,...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26203
|
1089
|
22
|
2026-05-12T12:13:20.462373+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588000462_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 674, Col 18
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/
, but there's no code to actually load and run them —
consumers/summary.py
has its own hardcoded prompts instead.
Here's what I'll implement:
consumers/pipes.py
— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)
main.py
— two new endpoints:
GET /api/pipes
and
POST /api/pipes/{pipe_id}/run
cli.py
— a
pipe
command to run pipes from the terminal
Let me build it:
Bash
Check browser_urls signature
IN
cat /volume1/screenpipe/app/consumers/activity.py | grep "def browser_urls" -A 5
Copy code to clipboard
OUT
def browser_urls(
for_date: date | None = None,
app_name: str | None = None,
ts_from: str | None = None,
ts_to: str | None = None,
limit: int = 30,
Write
pipes.py
pipes.py
143 lines
"""Dynamic pipe loader and runner."""
import os
import re
from datetime import date
from pathlib import Path
from typing import Any
def _parse_frontmatter(text: str) -> tuple[dict, str]:
if not text.startswith("---"):
return {}, text
try:
end = text.index("---", 3)
except ValueError:
return {}, text
fm_text = text[3:end].strip()
body = text[end + 3:].strip()
meta: dict = {}
for line in fm_text.splitlines():
if ":" in line:
k, _, v = line.partition(":")
meta[k.strip()] = v.strip().strip('"')
return meta, body
def load_pipes(pipes_dir: Path) -> list[dict]:
if not pipes_dir.exists():
return []
pipes = []
for pipe_dir in sorted(pipes_dir.iterdir()):
if not pipe_dir.is_dir() or pipe_dir.name.startswith("."):
continue
pipe_md = pipe_dir / "pipe.md"
if not pipe_md.exists():
continue
text = pipe_md.read_text(encoding="utf-8")
meta, body = _parse_frontmatter(text)
if meta.get("enabled", "true").lower() == "false":
continue
body = re.sub(r"Read screenpipe skill first\.?\n?", "", body).strip()
pipes.append({
"id": pipe_dir.name,
"title": meta.get("title", pipe_dir.name),
"description": meta.get("description", ""),
"icon": meta.get("icon", ""),
"schedule": meta.get("schedule", "manual"),
"featured": meta.get("featured", "false").lower() == "true",
"prompt": body,
})
return pipes
def _build_system(d: date, stats: dict) -> str:
from consumers.activity import app_time, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
apps = app_time(d)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(d, limit=20)
url_lines = "\n".join(f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls)
ui_rows = ui_event_summary(d)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(d, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(d)
if len(audio) > 3000:
audio = audio[:3000]
return f"""You are analyzing screenpipe data — recordings of a person's computer activity.
## App usage (minutes per app):
{app_lines or '(no app data)'}
## Browser URLs visited:
{url_lines or '(no browser data)'}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_lines or '(no UI event data)'}
## Screen content (sampled every 5 minutes):
{ocr_lines or '(no screen data)'}
## Audio / speech:
{audio or '(no audio data)'}
Date: {d}
Total frames recorded: {stats['total_frames']}"""
def run_pipe(
pipe_id: str,
for_date: date | None = None,
api_key: str | None = None,
pipes_dir: Path | None = None,
) -> dict[str, Any]:
import anthropic
from consumers.activity import summary_stats
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {"title": "Error", "content": "ANTHROPIC_API_KEY not set.", "date": str(d)}
_pipes_dir = pipes_dir or Path(os.environ.get("PIPES_DIR", "/data/pipes"))
all_pipes = {p["id"]: p for p in load_pipes(_pipes_dir)}
if pipe_id not in all_pipes:
return {"title": "Error", "content": f"Pipe not found: {pipe_id}", "date": str(d)}
pipe = all_pipes[pipe_id]
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {"title": pipe["title"], "content": f"No screen data found for {d}.", "date": str(d)}
system = _build_system(d, stats)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
system=system,
messages=[{"role": "user", "content": pipe["prompt"]}],
)
return {
"title": pipe["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Now add the API endpoints to
main.py
:
Edit
main.py
main.py
Added 1 line
Edit
main.py
main.py
Added 1 line
Now add the pipe endpoints at the end of main.py, before the closing summary section:
Edit
main.py
main.py
Added 14 lines
Now add the CLI command to
cli.py
cli.py
:
Edit
cli.py
cli.py
Added 40 lines
Done. Here's how to run pipes:
How to run pipes
How to run pipes
Via Docker (inside the running container):
Copy code to clipboard
docker exec -it screenpipe-app python cli.py pipe --list
docker exec -it screenpipe-app python cli.py pipe day-recap
docker exec -it screenpipe-app python cli.py pipe standup-update --date yesterday
Via the API
(once the container is running on port 8766):
Copy code to clipboard
# List pipes
curl http://localhost:8766/api/pipes
# Run a pipe
curl -X POST "http://localhost:8766/api/pipes/day-recap/run"
curl -X POST "http://localhost:8766/api/pipes/standup-update/run?d=2026-04-25"
Rebuild and restart
to pick up the changes:
Copy code to clipboard...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.33998403,"width":0.38031915,"height":0.014365523},"on_screen":true,"value":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.33998403,"width":0.38031915,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 674, Col 18","depth":16,"bounds":{"left":0.84674203,"top":0.98244214,"width":0.03158245,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"git-commit Not Committed Yet, Git Blame Information","depth":16,"bounds":{"left":0.79920214,"top":0.98244214,"width":0.045877658,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.80086434,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Not Committed Yet","depth":17,"bounds":{"left":0.8061835,"top":0.9856345,"width":0.03723404,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read summary consumer","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\n__pycache__\nreport.py\nsummary.py\n\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(for_date, limit=20)\n url_lines = \"\\n\".join(\n f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls\n )\n\n ui_rows = ui_event_summary(for_date)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"browser_urls\": url_lines or \"(no browser data)\",\n \"ui_events\": ui_lines or \"(no UI event data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read all pipe.md files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for f in /volume1/screenpipe/pipes/*/pipe.md; do echo \"=== $f ===\"; cat \"$f\"; echo; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: AI Habits\ndescription: \"How you use AI tools — patterns and insights\"\nicon: \"🤖\"\nfeatured: true\n---\n\nSearch my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## AI Tools Used\n- List each tool with approximate time spent (e.g. \"Claude: ~45min\")\n\n## What I Used Them For\n- For each tool: coding, writing, research, or brainstorming\n\n## Usage Patterns\n- Do I switch between tools? Use them in bursts or steadily?\n\n## Effectiveness\n- Which tool appeared alongside completed work vs. abandoned attempts\n\nIf no AI usage is found, say so clearly. End with: \"**Tip:** [one suggestion to use AI tools more effectively]\"\n\n=== /volume1/screenpipe/pipes/day-recap/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n\n=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.\n\n=== /volume1/screenpipe/pipes/standup-update/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Standup Update\ndescription: \"What you did, what's next, and any blockers\"\nicon: \"🏢\"\nfeatured: true\n---\n\nBased on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Yesterday\n- What I worked on (name specific projects, files, tools, PRs)\n\n## Today\n- What I will work on next (based on unfinished tasks and recent activity)\n\n## Blockers\n- Issues I hit — errors, slow builds, waiting on someone\n- If no blockers, write \"None\"\n\nKeep it under 150 words. Copy-paste ready for a team standup.\n\n=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Time Breakdown\ndescription: \"Where your time went — by app, project, and category\"\nicon: \"⏱\"\nfeatured: false\n---\n\nAnalyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.\n\nRead screenpipe skill first.\n\nUse this exact format with durations and percentages:\n\n## By Application\n- List each app with duration and percentage, sorted by time (e.g. \"VS Code: 2h 15min (28%)\")\n\n## By Category\n- Group into: coding, meetings, browsing, writing, communication, other\n- Show hours and percentage per category\n\n## By Project\n- Group related activities by project/topic. Name specific repos or tasks.\n\n## Productivity Score\n- Calculate: focused_work_hours / total_hours as a percentage\n- Focused = coding + writing. Unfocused = browsing + switching.\n\nEnd with: \"**Suggestion:** [one specific change to improve tomorrow's productivity]\"\n\n=== /volume1/screenpipe/pipes/video-export/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Export Video Clip\ndescription: \"Create a video of your recent screen activity\"\nicon: \"🎬\"\nfeatured: false\n---\n\nExport a video of my screen activity from the last 5 minutes.\n\nRead screenpipe skill first.\n\nUse the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.\n\nIf the export is large, suggest a lower fps or shorter time range.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a clear picture. The pipes are markdown prompt templates in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/pipes/","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", but there's no code to actually load and run them —","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/summary.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"has its own hardcoded prompts instead.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Here's what I'll implement:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/pipes.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— two new endpoints:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /api/pipes","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"POST /api/pipes/{pipe_id}/run","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"command to run pipes from the terminal","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me build it:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check browser_urls signature","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/app/consumers/activity.py | grep \"def browser_urls\" -A 5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"def browser_urls(\n for_date: date | None = None,\n app_name: str | None = None,\n ts_from: str | None = None,\n ts_to: str | None = None,\n limit: int = 30,","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"pipes.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pipes.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"143 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"Dynamic pipe loader and runner.\"\"\"\nimport os\nimport re\nfrom datetime import date\nfrom pathlib import Path\nfrom typing import Any\n\n\ndef _parse_frontmatter(text: str) -> tuple[dict, str]:\n if not text.startswith(\"---\"):\n return {}, text\n try:\n end = text.index(\"---\", 3)\n except ValueError:\n return {}, text\n fm_text = text[3:end].strip()\n body = text[end + 3:].strip()\n meta: dict = {}\n for line in fm_text.splitlines():\n if \":\" in line:\n k, _, v = line.partition(\":\")\n meta[k.strip()] = v.strip().strip('\"')\n return meta, body\n\n\ndef load_pipes(pipes_dir: Path) -> list[dict]:\n if not pipes_dir.exists():\n return []\n pipes = []\n for pipe_dir in sorted(pipes_dir.iterdir()):\n if not pipe_dir.is_dir() or pipe_dir.name.startswith(\".\"):\n continue\n pipe_md = pipe_dir / \"pipe.md\"\n if not pipe_md.exists():\n continue\n text = pipe_md.read_text(encoding=\"utf-8\")\n meta, body = _parse_frontmatter(text)\n if meta.get(\"enabled\", \"true\").lower() == \"false\":\n continue\n body = re.sub(r\"Read screenpipe skill first\\.?\\n?\", \"\", body).strip()\n pipes.append({\n \"id\": pipe_dir.name,\n \"title\": meta.get(\"title\", pipe_dir.name),\n \"description\": meta.get(\"description\", \"\"),\n \"icon\": meta.get(\"icon\", \"\"),\n \"schedule\": meta.get(\"schedule\", \"manual\"),\n \"featured\": meta.get(\"featured\", \"false\").lower() == \"true\",\n \"prompt\": body,\n })\n return pipes\n\n\ndef _build_system(d: date, stats: dict) -> str:\n from consumers.activity import app_time, browser_urls, ui_event_summary\n from consumers.ocr import deduplicated_text\n from consumers.audio import formatted_transcript\n\n apps = app_time(d)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(d, limit=20)\n url_lines = \"\\n\".join(f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls)\n\n ui_rows = ui_event_summary(d)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(d, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(d)\n if len(audio) > 3000:\n audio = audio[:3000]\n\n return f\"\"\"You are analyzing screenpipe data — recordings of a person's computer activity.\n\n## App usage (minutes per app):\n{app_lines or '(no app data)'}\n\n## Browser URLs visited:\n{url_lines or '(no browser data)'}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_lines or '(no UI event data)'}\n\n## Screen content (sampled every 5 minutes):\n{ocr_lines or '(no screen data)'}\n\n## Audio / speech:\n{audio or '(no audio data)'}\n\nDate: {d}\nTotal frames recorded: {stats['total_frames']}\"\"\"\n\n\ndef run_pipe(\n pipe_id: str,\n for_date: date | None = None,\n api_key: str | None = None,\n pipes_dir: Path | None = None,\n) -> dict[str, Any]:\n import anthropic\n from consumers.activity import summary_stats\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\"title\": \"Error\", \"content\": \"ANTHROPIC_API_KEY not set.\", \"date\": str(d)}\n\n _pipes_dir = pipes_dir or Path(os.environ.get(\"PIPES_DIR\", \"/data/pipes\"))\n all_pipes = {p[\"id\"]: p for p in load_pipes(_pipes_dir)}\n\n if pipe_id not in all_pipes:\n return {\"title\": \"Error\", \"content\": f\"Pipe not found: {pipe_id}\", \"date\": str(d)}\n\n pipe = all_pipes[pipe_id]\n stats = summary_stats(d)\n\n if stats[\"total_frames\"] == 0:\n return {\"title\": pipe[\"title\"], \"content\": f\"No screen data found for {d}.\", \"date\": str(d)}\n\n system = _build_system(d, stats)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n system=system,\n messages=[{\"role\": \"user\", \"content\": pipe[\"prompt\"]}],\n )\n\n return {\n \"title\": pipe[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the API endpoints to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the pipe endpoints at the end of main.py, before the closing summary section:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 14 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the CLI command to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 40 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Done. Here's how to run pipes:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to run pipes","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to run pipes","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Via Docker (inside the running container):","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker exec -it screenpipe-app python cli.py pipe --list\ndocker exec -it screenpipe-app python cli.py pipe day-recap\ndocker exec -it screenpipe-app python cli.py pipe standup-update --date yesterday","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Via the API","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(once the container is running on port 8766):","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# List pipes\ncurl http://localhost:8766/api/pipes\n\n# Run a pipe\ncurl -X POST \"http://localhost:8766/api/pipes/day-recap/run\"\ncurl -X POST \"http://localhost:8766/api/pipes/standup-update/run?d=2026-04-25\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rebuild and restart","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to pick up the changes:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2814100486700006487
|
-8923647854543468044
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 674, Col 18
git-commit Not Committed Yet, Git Blame Information
Not Committed Yet
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Standup Update
description: "What you did, what's next, and any blockers"
icon: "🏢"
featured: true
---
Based on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.
Read screenpipe skill first.
Use this exact format:
## Yesterday
- What I worked on (name specific projects, files, tools, PRs)
## Today
- What I will work on next (based on unfinished tasks and recent activity)
## Blockers
- Issues I hit — errors, slow builds, waiting on someone
- If no blockers, write "None"
Keep it under 150 words. Copy-paste ready for a team standup.
=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Time Breakdown
description: "Where your time went — by app, project, and category"
icon: "⏱"
featured: false
---
Analyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.
Read screenpipe skill first.
Use this exact format with durations and percentages:
## By Application
- List each app with duration and percentage, sorted by time (e.g. "VS Code: 2h 15min (28%)")
## By Category
- Group into: coding, meetings, browsing, writing, communication, other
- Show hours and percentage per category
## By Project
- Group related activities by project/topic. Name specific repos or tasks.
## Productivity Score
- Calculate: focused_work_hours / total_hours as a percentage
- Focused = coding + writing. Unfocused = browsing + switching.
End with: "**Suggestion:** [one specific change to improve tomorrow's productivity]"
=== /volume1/screenpipe/pipes/video-export/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Export Video Clip
description: "Create a video of your recent screen activity"
icon: "🎬"
featured: false
---
Export a video of my screen activity from the last 5 minutes.
Read screenpipe skill first.
Use the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.
If the export is large, suggest a lower fps or shorter time range.
Thinking
Thinking
Now I have a clear picture. The pipes are markdown prompt templates in
/volume1/screenpipe/pipes/
, but there's no code to actually load and run them —
consumers/summary.py
has its own hardcoded prompts instead.
Here's what I'll implement:
consumers/pipes.py
— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)
main.py
— two new endpoints:
GET /api/pipes
and
POST /api/pipes/{pipe_id}/run
cli.py
— a
pipe
command to run pipes from the terminal
Let me build it:
Bash
Check browser_urls signature
IN
cat /volume1/screenpipe/app/consumers/activity.py | grep "def browser_urls" -A 5
Copy code to clipboard
OUT
def browser_urls(
for_date: date | None = None,
app_name: str | None = None,
ts_from: str | None = None,
ts_to: str | None = None,
limit: int = 30,
Write
pipes.py
pipes.py
143 lines
"""Dynamic pipe loader and runner."""
import os
import re
from datetime import date
from pathlib import Path
from typing import Any
def _parse_frontmatter(text: str) -> tuple[dict, str]:
if not text.startswith("---"):
return {}, text
try:
end = text.index("---", 3)
except ValueError:
return {}, text
fm_text = text[3:end].strip()
body = text[end + 3:].strip()
meta: dict = {}
for line in fm_text.splitlines():
if ":" in line:
k, _, v = line.partition(":")
meta[k.strip()] = v.strip().strip('"')
return meta, body
def load_pipes(pipes_dir: Path) -> list[dict]:
if not pipes_dir.exists():
return []
pipes = []
for pipe_dir in sorted(pipes_dir.iterdir()):
if not pipe_dir.is_dir() or pipe_dir.name.startswith("."):
continue
pipe_md = pipe_dir / "pipe.md"
if not pipe_md.exists():
continue
text = pipe_md.read_text(encoding="utf-8")
meta, body = _parse_frontmatter(text)
if meta.get("enabled", "true").lower() == "false":
continue
body = re.sub(r"Read screenpipe skill first\.?\n?", "", body).strip()
pipes.append({
"id": pipe_dir.name,
"title": meta.get("title", pipe_dir.name),
"description": meta.get("description", ""),
"icon": meta.get("icon", ""),
"schedule": meta.get("schedule", "manual"),
"featured": meta.get("featured", "false").lower() == "true",
"prompt": body,
})
return pipes
def _build_system(d: date, stats: dict) -> str:
from consumers.activity import app_time, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
apps = app_time(d)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(d, limit=20)
url_lines = "\n".join(f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls)
ui_rows = ui_event_summary(d)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(d, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(d)
if len(audio) > 3000:
audio = audio[:3000]
return f"""You are analyzing screenpipe data — recordings of a person's computer activity.
## App usage (minutes per app):
{app_lines or '(no app data)'}
## Browser URLs visited:
{url_lines or '(no browser data)'}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_lines or '(no UI event data)'}
## Screen content (sampled every 5 minutes):
{ocr_lines or '(no screen data)'}
## Audio / speech:
{audio or '(no audio data)'}
Date: {d}
Total frames recorded: {stats['total_frames']}"""
def run_pipe(
pipe_id: str,
for_date: date | None = None,
api_key: str | None = None,
pipes_dir: Path | None = None,
) -> dict[str, Any]:
import anthropic
from consumers.activity import summary_stats
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {"title": "Error", "content": "ANTHROPIC_API_KEY not set.", "date": str(d)}
_pipes_dir = pipes_dir or Path(os.environ.get("PIPES_DIR", "/data/pipes"))
all_pipes = {p["id"]: p for p in load_pipes(_pipes_dir)}
if pipe_id not in all_pipes:
return {"title": "Error", "content": f"Pipe not found: {pipe_id}", "date": str(d)}
pipe = all_pipes[pipe_id]
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {"title": pipe["title"], "content": f"No screen data found for {d}.", "date": str(d)}
system = _build_system(d, stats)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
system=system,
messages=[{"role": "user", "content": pipe["prompt"]}],
)
return {
"title": pipe["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Now add the API endpoints to
main.py
:
Edit
main.py
main.py
Added 1 line
Edit
main.py
main.py
Added 1 line
Now add the pipe endpoints at the end of main.py, before the closing summary section:
Edit
main.py
main.py
Added 14 lines
Now add the CLI command to
cli.py
cli.py
:
Edit
cli.py
cli.py
Added 40 lines
Done. Here's how to run pipes:
How to run pipes
How to run pipes
Via Docker (inside the running container):
Copy code to clipboard
docker exec -it screenpipe-app python cli.py pipe --list
docker exec -it screenpipe-app python cli.py pipe day-recap
docker exec -it screenpipe-app python cli.py pipe standup-update --date yesterday
Via the API
(once the container is running on port 8766):
Copy code to clipboard
# List pipes
curl http://localhost:8766/api/pipes
# Run a pipe
curl -X POST "http://localhost:8766/api/pipes/day-recap/run"
curl -X POST "http://localhost:8766/api/pipes/standup-update/run?d=2026-04-25"
Rebuild and restart
to pick up the changes:
Copy code to clipboard...
|
26202
|
NULL
|
NULL
|
NULL
|
|
26215
|
1089
|
30
|
2026-05-12T12:13:50.027696+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588030027_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"}]...
|
761034168482417575
|
-6669777286391475839
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal...
|
26214
|
NULL
|
NULL
|
NULL
|
|
26216
|
1089
|
31
|
2026-05-12T12:13:51.063474+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588031063_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"}]...
|
-9115120455810709652
|
-5516041043667889723
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26217
|
1088
|
21
|
2026-05-12T12:13:50.050547+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588030050_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7508490275638289934
|
-5298462278247890681
|
click
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpallSupport Daily • 2 m left100% <78• Tue 12 May 15:13:49DOCKERDOCKER (-zsh)STAGE (ssh)₴81DEV (-zsh)O $2APP (-zsh)*3ec2-user@ip-10-30-129-.84T2PROD (-zsh)181screenpipe*kibanaasticsearch"{"type" : "log""@timestamp": "2026-05-11T19:54:53Z","tags" : ["warning""el,"data"], "pid" :7,'"message": "Unabletorevive connection: [URL_WITH_CREDENTIALS] : "2026-05-11T19:54:53Z",asticsearch", "data"],"pid":7,"message": "No livingconnections"}"warning","elkibanaI {"type" : "log", "@timestamp" : "2026-05-11T19:54:53Z": ["warning"ugins""licensing"], "pid" :7,"message" : "License informationcould not be obtainedasticsearch due to Error: No Livingconnectionskibana1 {"type" : "log","@timestamp" : "2026-05-11T19:54:54Z","tags" : ["error"ticsearch", "data"], "pid":7, "message" : "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch: 9200"}kibana1 {"type" : "log","@timestamp": "2026-05-11T19:54:54Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7,"message":"Unable to reviveconnection: [URL_WITH_CREDENTIALS] "2026-05-11T19:54:54Z","tags" : ["warning", "elasticsearch", "data"],"pid":7,"message"• "No livingconnections"}kibana1 {"type": "log","@timestamp": "2026-05-11T19:54:54Z""tags" : ["error", "plugins", "taskManager","taskManager"], "pid" :7, "message": "Failed to poll for work: Error: NoLiving connections"}kibana1 {"type": "log", "@timestamp": "2026-05-11T19:54:572", "tags" : ["error", "elasticsearch".,"data"], "pid" :7, "message" :"[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200*}kibana1 {"type" : "Log","@timestamp" : "2026-05-11T19:54:57Z","tags" : ["warning","elasticsearch", "data"], "pid" :7, "message": "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-11T19:54:57Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7, "message": "No living connections"}kibanaI {"type" : "log", "@timestamp" : "2026-05-11T19:54:57Z", "tags" : ["error","plugins", "taskManager", "taskManager"], "pid" :7, "message" : "Failed to pollfor work: Error: NoLiving connections"}kibanaI {"type" : "log", "@timestamp" : "2026-05-11T19:54:59Z","tags" : ["error", "elasticsearch", "data"], "pid" :7, "message" : "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}1 {"type" : "log","@timestamp": "2026-05-11T19:55: 00Z""tags": ["warning"asticsearch", "data"], "pid" :7, "message": "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-11T19:55 :00Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7, "message": "No living connections"}1 {"type": "log", "@timestamp" : "2026-05-11T19:55:00Z","tags" : ["error", "plug, "taskManager",, "taskManager"], "pid" :7, "message": "Failed to poll for work: Error: NoLiving connections"}unexpected EOFkas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $-zshX5O ₴6-zsh*** System restart required ***Last login: Thu May7 08:01:13 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$lukas@jiminny-prod-bastion:~$ client_loop: send disconnect: Broken pipeukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ||T3 EU (ssh)New release'24.04.4 LTS' available.Run'do-release-upgrade'to upgrade to it.*** System restart required ***Last login: Wed Apr 22 08:09:46 2026 from 212.5.153.87lukas@jiminny-eu-bastion:~$ |T4STAGE (ssh)Run 'do-release-upgrade' to upgrade to it.System restart required ***Last login: Thu May7 11:01:47 2026 from 212.5.153.87bastion:-$QA (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentsT6FE (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPRODSTAGEFRONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentsLukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ |17 EXT (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentsukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ lEXTENSION...
|
26213
|
NULL
|
NULL
|
NULL
|
|
26218
|
1088
|
22
|
2026-05-12T12:13:53.842519+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588033842_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 842, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"on_screen":true,"value":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 842, Col 1","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"}]...
|
-7285058151832504260
|
3474621147501528965
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 842, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26219
|
1089
|
32
|
2026-05-12T12:13:53.877925+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588033877_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 842, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedu...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"bounds":{"left":0.009973404,"top":0.06863528,"width":0.0016622341,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.54110134,"width":0.38031915,"height":0.014365523},"on_screen":true,"value":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.54110134,"width":0.38031915,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 842, Col 1","depth":16,"bounds":{"left":0.8494016,"top":0.98244214,"width":0.028922873,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read summary consumer","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\n__pycache__\nreport.py\nsummary.py\n\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(for_date, limit=20)\n url_lines = \"\\n\".join(\n f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls\n )\n\n ui_rows = ui_event_summary(for_date)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"browser_urls\": url_lines or \"(no browser data)\",\n \"ui_events\": ui_lines or \"(no UI event data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read all pipe.md files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for f in /volume1/screenpipe/pipes/*/pipe.md; do echo \"=== $f ===\"; cat \"$f\"; echo; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: AI Habits\ndescription: \"How you use AI tools — patterns and insights\"\nicon: \"🤖\"\nfeatured: true\n---\n\nSearch my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## AI Tools Used\n- List each tool with approximate time spent (e.g. \"Claude: ~45min\")\n\n## What I Used Them For\n- For each tool: coding, writing, research, or brainstorming\n\n## Usage Patterns\n- Do I switch between tools? Use them in bursts or steadily?\n\n## Effectiveness\n- Which tool appeared alongside completed work vs. abandoned attempts\n\nIf no AI usage is found, say so clearly. End with: \"**Tip:** [one suggestion to use AI tools more effectively]\"\n\n=== /volume1/screenpipe/pipes/day-recap/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n\n=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.\n\n=== /volume1/screenpipe/pipes/standup-update/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Standup Update\ndescription: \"What you did, what's next, and any blockers\"\nicon: \"🏢\"\nfeatured: true\n---\n\nBased on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Yesterday\n- What I worked on (name specific projects, files, tools, PRs)\n\n## Today\n- What I will work on next (based on unfinished tasks and recent activity)\n\n## Blockers\n- Issues I hit — errors, slow builds, waiting on someone\n- If no blockers, write \"None\"\n\nKeep it under 150 words. Copy-paste ready for a team standup.\n\n=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Time Breakdown\ndescription: \"Where your time went — by app, project, and category\"\nicon: \"⏱\"\nfeatured: false\n---\n\nAnalyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.\n\nRead screenpipe skill first.\n\nUse this exact format with durations and percentages:\n\n## By Application\n- List each app with duration and percentage, sorted by time (e.g. \"VS Code: 2h 15min (28%)\")\n\n## By Category\n- Group into: coding, meetings, browsing, writing, communication, other\n- Show hours and percentage per category\n\n## By Project\n- Group related activities by project/topic. Name specific repos or tasks.\n\n## Productivity Score\n- Calculate: focused_work_hours / total_hours as a percentage\n- Focused = coding + writing. Unfocused = browsing + switching.\n\nEnd with: \"**Suggestion:** [one specific change to improve tomorrow's productivity]\"\n\n=== /volume1/screenpipe/pipes/video-export/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Export Video Clip\ndescription: \"Create a video of your recent screen activity\"\nicon: \"🎬\"\nfeatured: false\n---\n\nExport a video of my screen activity from the last 5 minutes.\n\nRead screenpipe skill first.\n\nUse the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.\n\nIf the export is large, suggest a lower fps or shorter time range.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a clear picture. The pipes are markdown prompt templates in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/pipes/","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", but there's no code to actually load and run them —","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/summary.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"has its own hardcoded prompts instead.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Here's what I'll implement:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/pipes.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— two new endpoints:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /api/pipes","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"POST /api/pipes/{pipe_id}/run","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"command to run pipes from the terminal","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me build it:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check browser_urls signature","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/app/consumers/activity.py | grep \"def browser_urls\" -A 5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"def browser_urls(\n for_date: date | None = None,\n app_name: str | None = None,\n ts_from: str | None = None,\n ts_to: str | None = None,\n limit: int = 30,","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"pipes.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pipes.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"143 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"Dynamic pipe loader and runner.\"\"\"\nimport os\nimport re\nfrom datetime import date\nfrom pathlib import Path\nfrom typing import Any\n\n\ndef _parse_frontmatter(text: str) -> tuple[dict, str]:\n if not text.startswith(\"---\"):\n return {}, text\n try:\n end = text.index(\"---\", 3)\n except ValueError:\n return {}, text\n fm_text = text[3:end].strip()\n body = text[end + 3:].strip()\n meta: dict = {}\n for line in fm_text.splitlines():\n if \":\" in line:\n k, _, v = line.partition(\":\")\n meta[k.strip()] = v.strip().strip('\"')\n return meta, body\n\n\ndef load_pipes(pipes_dir: Path) -> list[dict]:\n if not pipes_dir.exists():\n return []\n pipes = []\n for pipe_dir in sorted(pipes_dir.iterdir()):\n if not pipe_dir.is_dir() or pipe_dir.name.startswith(\".\"):\n continue\n pipe_md = pipe_dir / \"pipe.md\"\n if not pipe_md.exists():\n continue\n text = pipe_md.read_text(encoding=\"utf-8\")\n meta, body = _parse_frontmatter(text)\n if meta.get(\"enabled\", \"true\").lower() == \"false\":\n continue\n body = re.sub(r\"Read screenpipe skill first\\.?\\n?\", \"\", body).strip()\n pipes.append({\n \"id\": pipe_dir.name,\n \"title\": meta.get(\"title\", pipe_dir.name),\n \"description\": meta.get(\"description\", \"\"),\n \"icon\": meta.get(\"icon\", \"\"),\n \"schedule\": meta.get(\"schedule\", \"manual\"),\n \"featured\": meta.get(\"featured\", \"false\").lower() == \"true\",\n \"prompt\": body,\n })\n return pipes\n\n\ndef _build_system(d: date, stats: dict) -> str:\n from consumers.activity import app_time, browser_urls, ui_event_summary\n from consumers.ocr import deduplicated_text\n from consumers.audio import formatted_transcript\n\n apps = app_time(d)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(d, limit=20)\n url_lines = \"\\n\".join(f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls)\n\n ui_rows = ui_event_summary(d)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(d, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(d)\n if len(audio) > 3000:\n audio = audio[:3000]\n\n return f\"\"\"You are analyzing screenpipe data — recordings of a person's computer activity.\n\n## App usage (minutes per app):\n{app_lines or '(no app data)'}\n\n## Browser URLs visited:\n{url_lines or '(no browser data)'}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_lines or '(no UI event data)'}\n\n## Screen content (sampled every 5 minutes):\n{ocr_lines or '(no screen data)'}\n\n## Audio / speech:\n{audio or '(no audio data)'}\n\nDate: {d}\nTotal frames recorded: {stats['total_frames']}\"\"\"\n\n\ndef run_pipe(\n pipe_id: str,\n for_date: date | None = None,\n api_key: str | None = None,\n pipes_dir: Path | None = None,\n) -> dict[str, Any]:\n import anthropic\n from consumers.activity import summary_stats\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\"title\": \"Error\", \"content\": \"ANTHROPIC_API_KEY not set.\", \"date\": str(d)}\n\n _pipes_dir = pipes_dir or Path(os.environ.get(\"PIPES_DIR\", \"/data/pipes\"))\n all_pipes = {p[\"id\"]: p for p in load_pipes(_pipes_dir)}\n\n if pipe_id not in all_pipes:\n return {\"title\": \"Error\", \"content\": f\"Pipe not found: {pipe_id}\", \"date\": str(d)}\n\n pipe = all_pipes[pipe_id]\n stats = summary_stats(d)\n\n if stats[\"total_frames\"] == 0:\n return {\"title\": pipe[\"title\"], \"content\": f\"No screen data found for {d}.\", \"date\": str(d)}\n\n system = _build_system(d, stats)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n system=system,\n messages=[{\"role\": \"user\", \"content\": pipe[\"prompt\"]}],\n )\n\n return {\n \"title\": pipe[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the API endpoints to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the pipe endpoints at the end of main.py, before the closing summary section:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 14 lines","depth":24,"on_screen":false,"role_description":"text"}]...
|
-5806061030764627947
|
3492635546011010965
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 842, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedu...
|
26216
|
NULL
|
NULL
|
NULL
|
|
26220
|
1088
|
23
|
2026-05-12T12:14:24.141601+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588064141_m1.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2494652387981003369
|
-5516291732722777663
|
idle
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section...
|
26218
|
NULL
|
NULL
|
NULL
|
|
26221
|
1089
|
33
|
2026-05-12T12:14:24.288039+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778588064288_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas] — Modif screenpipe_sync.sh — screenpipe [SSH: nas] — Modified...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 842, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedu...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"bounds":{"left":0.009973404,"top":0.06863528,"width":0.0016622341,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 11 pending changes","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"11","depth":22,"bounds":{"left":0.008976064,"top":0.1452514,"width":0.0033244682,"height":0.008778931},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.00930851,"top":0.14604948,"width":0.0016622341,"height":0.007980846}},{"char_start":1,"char_count":1,"bounds":{"left":0.010638298,"top":0.14604948,"width":0.0019946808,"height":0.007980846}}],"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.11412609,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10638298,"top":0.14924182,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.23703113,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"U","depth":27,"bounds":{"left":0.107380316,"top":0.30726257,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"M","depth":27,"bounds":{"left":0.106715426,"top":0.32482043,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06549202,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23736702,"top":0.047885075,"width":0.0831117,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.32047874,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.36037233,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.54110134,"width":0.38031915,"height":0.014365523},"on_screen":true,"value":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"done\n\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);\nDETACH nas;\n\"\n\n # ─── FTS TABLES (contentless, install-safe) ───────────────────────────────\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role,\n install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device,\n speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n TAGS_COLS=$(build_col_list tags)\n VTAGS_COLS=$(build_col_list vision_tags)\n VTAGS_COLS_VT=$(build_col_list vision_tags vt)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC SHARED ──────────────────────────────────────────────────────────\n step \"Syncing shared tables (tags, vision_tags)\"\n\n run_sqlite_heredoc \"tags ($SRC_TAGS rows, all)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)\n SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"vision_tags ($SRC_VTAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)\n SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt\n JOIN main.frames f ON vt.vision_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────\n # No `rowid` specified; SQLite assigns a fresh one. install_id + source_id\n # are UNINDEXED columns so JOIN-back-to-base queries work.\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)\n SELECT full_text, app_name, window_name, browser_url, install_id, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL AND full_text != '';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)\n SELECT e.text, e.role, e.install_id, e.id, e.frame_id\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)\n SELECT text_content, app_name, window_title, element_name, install_id, id\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)\n SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_VTAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n check \"vision_tags\" \"$V_VTAGS\" \"$SRC_VTAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-40s ✗ %s / %s files\\n\" \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-40s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-40s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-40s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-40s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-40s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.54110134,"width":0.38031915,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…, Editor Group 2","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.20910904,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.2130984,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports - 1 forwarded port","depth":22,"bounds":{"left":0.2357048,"top":0.7278532,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.23969415,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.2549867,"top":0.73743016,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.003656915,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"bounds":{"left":0.03125,"top":0.98244214,"width":0.023271276,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.032247342,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03756649,"top":0.9856345,"width":0.015957447,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.064494684,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06615692,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.071476065,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.076130316,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08144947,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Forwarded Ports: 8766","depth":16,"bounds":{"left":0.0887633,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.09042553,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":17,"bounds":{"left":0.095744684,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.96542555,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96708775,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.9724069,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Shell Script","depth":16,"bounds":{"left":0.93949467,"top":0.98244214,"width":0.023603724,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.9321808,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.9215425,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.90392286,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.8799867,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 842, Col 1","depth":16,"bounds":{"left":0.8494016,"top":0.98244214,"width":0.028922873,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Implement and run pipe logic","depth":19,"bounds":{"left":0.56050533,"top":0.08060654,"width":0.07114362,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.97839093,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.9890292,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"main.py","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lets implement logic with pipes. how can I run it?","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me look at the current project structure to understand what's already in place.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List project files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"find /volume1/screenpipe -type f | head -50 && echo \"---\" && ls /volume1/screenpipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/.DS_Store\n/volume1/screenpipe/screenpipe.db\n/volume1/screenpipe/screenpipe_sync.sh\n/volume1/screenpipe/app_settings.json\n/volume1/screenpipe/.gitignore\n/volume1/screenpipe/archive.db\n/volume1/screenpipe/db.sqlite\n/volume1/screenpipe/db.sqlite-wal\n/volume1/screenpipe/db.sqlite-shm\n/volume1/screenpipe/#recycle/desktop.ini\n/volume1/screenpipe/#recycle/db.sqlite\n/volume1/screenpipe/#recycle/Copy #1 of db.sqlite\n/volume1/screenpipe/#recycle/.DS_Store\n/volume1/screenpipe/#recycle/Copy #2 of db.sqlite\n/volume1/screenpipe/#recycle/archive.db\n/volume1/screenpipe/#recycle/Copy #1 of archive.db\n/volume1/screenpipe/#recycle/Copy #2 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of archive.db\n/volume1/screenpipe/#recycle/Copy #4 of archive.db\n/volume1/screenpipe/#recycle/Copy #5 of archive.db\n/volume1/screenpipe/#recycle/Copy #3 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #4 of db.sqlite\n/volume1/screenpipe/#recycle/Copy #6 of archive.db\n/volume1/screenpipe/#recycle/test.txt\n/volume1/screenpipe/#recycle/Copy #7 of archive.db\n/volume1/screenpipe/#recycle/Copy #8 of archive.db\n/volume1/screenpipe/#recycle/archive.db-journal\n/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal\n/volume1/screenpipe/#recycle/Copy #5 of db.sqlite\n/volume1/screenpipe/pipes/.DS_Store\n/volume1/screenpipe/app/.env\n/volume1/screenpipe/app/cli.py\n/volume1/screenpipe/app/.DS_Store\n/volume1/screenpipe/app/db.py\n/volume1/screenpipe/app/docker-compose.yml\n/volume1/screenpipe/app/main.py\n/volume1/screenpipe/app/requirements.txt\n/volume1/screenpipe/app/Dockerfile\n/volume1/screenpipe/data/.DS_Store\n/volume1/screenpipe/.git/description\n/volume1/screenpipe/.git/HEAD\n/volume1/screenpipe/.git/index\n/volume1/screenpipe/.git/COMMIT_EDITMSG\n/volume1/screenpipe/#recycle/data/.DS_Store\n---\napp\napp_settings.json\narchive.db\ndata\ndb.sqlite\ndb.sqlite-shm\ndb.sqlite-wal\npipes\n#recycle\nscreenpipe.db\nscreenpipe_sync.sh","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check pipes directory and docker-compose","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\ncli.py\nconsumers\ndb.py\ndocker-compose.yml\nDockerfile\nmain.py\n__pycache__\nrequirements.txt\nstatic\nservices:\n screenpipe-app:\n build: .\n container_name: screenpipe-app\n restart: unless-stopped\n ports:\n - \"8766:8000\"\n volumes:\n - /volume1/screenpipe:/data\n env_file:\n - .env\n environment:\n TZ: Europe/Sofia\n DB_PATH: /data/db.sqlite\n\n sqlite-web-archive:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-archive\n restart: unless-stopped\n ports:\n - \"8767:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/archive.db\"]\n\n sqlite-web-live:\n image: ghcr.io/coleifer/sqlite-web:latest\n container_name: screenpipe-sqlweb-live\n restart: unless-stopped\n ports:\n - \"8768:8080\"\n volumes:\n - /volume1/screenpipe:/data\n command: [\"-H\", \"0.0.0.0\", \"-r\", \"/data/db.sqlite\"]","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Inspect a pipe directory","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\npipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List all pipes and their contents","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo \"=== $d ===\"; ls \"$d\"; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n=== /volume1/screenpipe/pipes/ai-habits/ ===\npipe.md\n=== /volume1/screenpipe/pipes/day-recap/ ===\npipe.md\n=== /volume1/screenpipe/pipes/meeting-summary/ ===\npipe.md\n=== /volume1/screenpipe/pipes/standup-update/ ===\npipe.md\n=== /volume1/screenpipe/pipes/time-breakdown/ ===\npipe.md\n=== /volume1/screenpipe/pipes/video-export/ ===\npipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read pipe markdown files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo \"===\" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read summary consumer","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"activity.py\naudio.py\nelements.py\n__init__.py\ninteractions.py\nocr.py\n__pycache__\nreport.py\nsummary.py\n\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Browser URLs visited:\n{browser_urls}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_events}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(for_date, limit=20)\n url_lines = \"\\n\".join(\n f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls\n )\n\n ui_rows = ui_event_summary(for_date)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"browser_urls\": url_lines or \"(no browser data)\",\n \"ui_events\": ui_lines or \"(no UI event data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read all pipe.md files","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"for f in /volume1/screenpipe/pipes/*/pipe.md; do echo \"=== $f ===\"; cat \"$f\"; echo; done","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: AI Habits\ndescription: \"How you use AI tools — patterns and insights\"\nicon: \"🤖\"\nfeatured: true\n---\n\nSearch my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## AI Tools Used\n- List each tool with approximate time spent (e.g. \"Claude: ~45min\")\n\n## What I Used Them For\n- For each tool: coding, writing, research, or brainstorming\n\n## Usage Patterns\n- Do I switch between tools? Use them in bursts or steadily?\n\n## Effectiveness\n- Which tool appeared alongside completed work vs. abandoned attempts\n\nIf no AI usage is found, say so clearly. End with: \"**Tip:** [one suggestion to use AI tools more effectively]\"\n\n=== /volume1/screenpipe/pipes/day-recap/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n\n=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Meeting Summary\ndescription: \"Summarize meeting transcript with key takeaways and action items\"\nicon: \"🤝\"\nfeatured: false\n---\n\nSummarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Meeting Summary\nOne sentence: what this meeting was about.\n\n## Key Takeaways\n- Top 3-5 important points discussed\n- Include who said what when relevant\n\n## Action Items\n- [ ] Task — assigned to whom, deadline if mentioned\n- [ ] Task — assigned to whom\n\n## Decisions Made\n- List any decisions or agreements reached\n\n## Open Questions\n- Anything unresolved or needing follow-up\n\nKeep it concise and actionable.\n\n=== /volume1/screenpipe/pipes/standup-update/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Standup Update\ndescription: \"What you did, what's next, and any blockers\"\nicon: \"🏢\"\nfeatured: true\n---\n\nBased on my recordings from the last 24 hours, generate a standup update. Use limit=10 per search, max 3 searches total.\n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Yesterday\n- What I worked on (name specific projects, files, tools, PRs)\n\n## Today\n- What I will work on next (based on unfinished tasks and recent activity)\n\n## Blockers\n- Issues I hit — errors, slow builds, waiting on someone\n- If no blockers, write \"None\"\n\nKeep it under 150 words. Copy-paste ready for a team standup.\n\n=== /volume1/screenpipe/pipes/time-breakdown/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Time Breakdown\ndescription: \"Where your time went — by app, project, and category\"\nicon: \"⏱\"\nfeatured: false\n---\n\nAnalyze my app usage from today (last 12 hours). Use limit=10 per search, max 4 searches. Prefer /raw_sql with COUNT/GROUP BY queries.\n\nRead screenpipe skill first.\n\nUse this exact format with durations and percentages:\n\n## By Application\n- List each app with duration and percentage, sorted by time (e.g. \"VS Code: 2h 15min (28%)\")\n\n## By Category\n- Group into: coding, meetings, browsing, writing, communication, other\n- Show hours and percentage per category\n\n## By Project\n- Group related activities by project/topic. Name specific repos or tasks.\n\n## Productivity Score\n- Calculate: focused_work_hours / total_hours as a percentage\n- Focused = coding + writing. Unfocused = browsing + switching.\n\nEnd with: \"**Suggestion:** [one specific change to improve tomorrow's productivity]\"\n\n=== /volume1/screenpipe/pipes/video-export/pipe.md ===\n---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Export Video Clip\ndescription: \"Create a video of your recent screen activity\"\nicon: \"🎬\"\nfeatured: false\n---\n\nExport a video of my screen activity from the last 5 minutes.\n\nRead screenpipe skill first.\n\nUse the POST /frames/export endpoint with the time range and fps=1.0. Then show me the exported video file path as an inline code block so I can watch it.\n\nIf the export is large, suggest a lower fps or shorter time range.","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now I have a clear picture. The pipes are markdown prompt templates in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe/pipes/","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", but there's no code to actually load and run them —","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/summary.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"has its own hardcoded prompts instead.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Here's what I'll implement:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"consumers/pipes.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— dynamically loads pipe.md files and runs them via Claude (data injected as system message, pipe body as user prompt)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— two new endpoints:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"GET /api/pipes","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"POST /api/pipes/{pipe_id}/run","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":26,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— a","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"command to run pipes from the terminal","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Let me build it:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Check browser_urls signature","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/app/consumers/activity.py | grep \"def browser_urls\" -A 5","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"def browser_urls(\n for_date: date | None = None,\n app_name: str | None = None,\n ts_from: str | None = None,\n ts_to: str | None = None,\n limit: int = 30,","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"pipes.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pipes.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"143 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"Dynamic pipe loader and runner.\"\"\"\nimport os\nimport re\nfrom datetime import date\nfrom pathlib import Path\nfrom typing import Any\n\n\ndef _parse_frontmatter(text: str) -> tuple[dict, str]:\n if not text.startswith(\"---\"):\n return {}, text\n try:\n end = text.index(\"---\", 3)\n except ValueError:\n return {}, text\n fm_text = text[3:end].strip()\n body = text[end + 3:].strip()\n meta: dict = {}\n for line in fm_text.splitlines():\n if \":\" in line:\n k, _, v = line.partition(\":\")\n meta[k.strip()] = v.strip().strip('\"')\n return meta, body\n\n\ndef load_pipes(pipes_dir: Path) -> list[dict]:\n if not pipes_dir.exists():\n return []\n pipes = []\n for pipe_dir in sorted(pipes_dir.iterdir()):\n if not pipe_dir.is_dir() or pipe_dir.name.startswith(\".\"):\n continue\n pipe_md = pipe_dir / \"pipe.md\"\n if not pipe_md.exists():\n continue\n text = pipe_md.read_text(encoding=\"utf-8\")\n meta, body = _parse_frontmatter(text)\n if meta.get(\"enabled\", \"true\").lower() == \"false\":\n continue\n body = re.sub(r\"Read screenpipe skill first\\.?\\n?\", \"\", body).strip()\n pipes.append({\n \"id\": pipe_dir.name,\n \"title\": meta.get(\"title\", pipe_dir.name),\n \"description\": meta.get(\"description\", \"\"),\n \"icon\": meta.get(\"icon\", \"\"),\n \"schedule\": meta.get(\"schedule\", \"manual\"),\n \"featured\": meta.get(\"featured\", \"false\").lower() == \"true\",\n \"prompt\": body,\n })\n return pipes\n\n\ndef _build_system(d: date, stats: dict) -> str:\n from consumers.activity import app_time, browser_urls, ui_event_summary\n from consumers.ocr import deduplicated_text\n from consumers.audio import formatted_transcript\n\n apps = app_time(d)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n urls = browser_urls(d, limit=20)\n url_lines = \"\\n\".join(f\"- {u['browser_url'][:100]} ({u['minutes']} min)\" for u in urls)\n\n ui_rows = ui_event_summary(d)\n ui_lines = \"\\n\".join(\n f\"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches\"\n for r in ui_rows[:15]\n )\n\n ocr_rows = deduplicated_text(d, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(d)\n if len(audio) > 3000:\n audio = audio[:3000]\n\n return f\"\"\"You are analyzing screenpipe data — recordings of a person's computer activity.\n\n## App usage (minutes per app):\n{app_lines or '(no app data)'}\n\n## Browser URLs visited:\n{url_lines or '(no browser data)'}\n\n## UI activity per app (clicks / keystrokes / app-switches):\n{ui_lines or '(no UI event data)'}\n\n## Screen content (sampled every 5 minutes):\n{ocr_lines or '(no screen data)'}\n\n## Audio / speech:\n{audio or '(no audio data)'}\n\nDate: {d}\nTotal frames recorded: {stats['total_frames']}\"\"\"\n\n\ndef run_pipe(\n pipe_id: str,\n for_date: date | None = None,\n api_key: str | None = None,\n pipes_dir: Path | None = None,\n) -> dict[str, Any]:\n import anthropic\n from consumers.activity import summary_stats\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\"title\": \"Error\", \"content\": \"ANTHROPIC_API_KEY not set.\", \"date\": str(d)}\n\n _pipes_dir = pipes_dir or Path(os.environ.get(\"PIPES_DIR\", \"/data/pipes\"))\n all_pipes = {p[\"id\"]: p for p in load_pipes(_pipes_dir)}\n\n if pipe_id not in all_pipes:\n return {\"title\": \"Error\", \"content\": f\"Pipe not found: {pipe_id}\", \"date\": str(d)}\n\n pipe = all_pipes[pipe_id]\n stats = summary_stats(d)\n\n if stats[\"total_frames\"] == 0:\n return {\"title\": pipe[\"title\"], \"content\": f\"No screen data found for {d}.\", \"date\": str(d)}\n\n system = _build_system(d, stats)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-haiku-4-5-20251001\",\n max_tokens=1024,\n system=system,\n messages=[{\"role\": \"user\", \"content\": pipe[\"prompt\"]}],\n )\n\n return {\n \"title\": pipe[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the API endpoints to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the pipe endpoints at the end of main.py, before the closing summary section:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 14 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Now add the CLI command to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":24,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Added 40 lines","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Done. Here's how to run pipes:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"How to run pipes","depth":22,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"How to run pipes","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Via Docker (inside the running container):","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"docker exec -it screenpipe-app python cli.py pipe --list\ndocker exec -it screenpipe-app python cli.py pipe day-recap\ndocker exec -it screenpipe-app python cli.py pipe standup-update --date yesterday","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Via the API","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(once the container is running on port 8766):","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# List pipes\ncurl http://localhost:8766/api/pipes\n\n# Run a pipe\ncurl -X POST \"http://localhost:8766/api/pipes/day-recap/run\"\ncurl -X POST \"http://localhost:8766/api/pipes/standup-update/run?d=2026-04-25\"","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Rebuild and restart","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"to pick up the changes:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cd /volume1/screenpipe/app\ndocker compose up --build -d","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"How it works:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Each","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"file is loaded dynamically — the frontmatter provides metadata and the body becomes the user prompt. Screenpipe data (app usage, browser URLs, OCR, audio) is injected as a Claude system message so the pipe prompt can reference it naturally. The \"Read screenpipe skill first\" line is stripped automatically.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"The pipes directory inside Docker is","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/data/pipes","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"(since","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/volume1/screenpipe","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"→","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"/data","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"). You can override it with a","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"PIPES_DIR","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"env var if needed.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"pipe.md","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"where to place api key and can I use different keys","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Read .env file","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/app/.env","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"ANTHROPIC_API_KEY=your_key_here","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Where to place the key:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"app/.env","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app/.env","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"— replace","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"your_key_here","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"with your actual key:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ANTHROPIC_API_KEY=sk-ant-...","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"That file is loaded by","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"load_dotenv()","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"at startup and is excluded from git via","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Can you use different keys per pipe?","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Not currently — all pipes share the one key from","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":". But you can add per-pipe key support by adding an","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"api_key","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"field to the pipe's frontmatter:","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"---\ntitle: Meeting Summary\napi_key_env: ANTHROPIC_KEY_MEETINGS\n---","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Then in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"consumers/pipes.py","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"consumers/pipes.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", read it in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"_parse_frontmatter","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and pass it through","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"run_pipe","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":". Want me to add that?","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"pipe.md","depth":23,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"pipe.md","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"can I use mistral or other llm? or is is build for antrophic only","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Currently it's Anthropic-only — the code calls the","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"anthropic","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SDK directly in both","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"consumers/pipes.py","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"consumers/pipes.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"and","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"consumers/summary.py","depth":23,"on_screen":false,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"consumers/summary.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Adding other providers is straightforward since Mistral, Ollama, OpenRouter, Groq, and most modern LLMs expose an OpenAI-compatible API. The cleanest approach: add the","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"openai","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"package and let you configure the provider via","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":":","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"on_screen":false,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"# Anthropic (default)\nANTHROPIC_API_KEY=sk-ant-...\n\n# OR: any OpenAI-compatible provider\nLLM_PROVIDER=openai-compatible\nLLM_BASE_URL=https://api.mistral.ai/v1\nLLM_API_KEY=your-mistral-key\nLLM_MODEL=mistral-small-latest","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"This would cover Mistral, Ollama (","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"http://localhost:11434/v1","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"), OpenRouter, Groq, etc. with one code path.","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Want me to implement that? It's a small change — a","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"_call_llm(system, user_prompt)","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"helper in","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"pipes.py","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"that branches on","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"LLM_PROVIDER","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":", and","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"openai","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"added to","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":".","depth":23,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":24,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lets test it with anthropic first, how to run pipe","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"on_screen":false,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"on_screen":false,"role_description":"text"}]...
|
-5806061030764627947
|
3492635546011010965
|
idle
|
accessibility
|
NULL
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G) - 11 pending changes
11
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
U
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
U
screenpipe_sync.sh
M
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
done
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(install_id, frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(install_id, frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(install_id, frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(install_id, audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(install_id, speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(install_id, speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(install_id, audio_chunk_id);
DETACH nas;
"
# ─── FTS TABLES (contentless, install-safe) ───────────────────────────────
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role,
install_id UNINDEXED, source_id UNINDEXED, frame_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device,
speaker_id UNINDEXED, install_id UNINDEXED, source_id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD COLUMN LISTS ───────────────────────────────────────────────────
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
TAGS_COLS=$(build_col_list tags)
VTAGS_COLS=$(build_col_list vision_tags)
VTAGS_COLS_VT=$(build_col_list vision_tags vt)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC SHARED ──────────────────────────────────────────────────────────
step "Syncing shared tables (tags, vision_tags)"
run_sqlite_heredoc "tags ($SRC_TAGS rows, all)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.tags ($TAGS_COLS, install_id)
SELECT $TAGS_COLS, '$INSTALL_ID' FROM main.tags;
DETACH nas;
"
run_sqlite_heredoc "vision_tags ($SRC_VTAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.vision_tags ($VTAGS_COLS, install_id)
SELECT $VTAGS_COLS_VT, '$INSTALL_ID' FROM main.vision_tags vt
JOIN main.frames f ON vt.vision_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE (contentless, auto-rowid, no collisions) ──────────────────
# No `rowid` specified; SQLite assigns a fresh one. install_id + source_id
# are UNINDEXED columns so JOIN-back-to-base queries work.
step "Updating FTS indexes"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.frames_fts(full_text, app_name, window_name, browser_url, install_id, source_id)
SELECT full_text, app_name, window_name, browser_url, install_id, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL AND full_text != '';
DETACH nas;
"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.elements_fts(text, role, install_id, source_id, frame_id)
SELECT e.text, e.role, e.install_id, e.id, e.frame_id
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.ui_events_fts(text_content, app_name, window_title, element_name, install_id, source_id)
SELECT text_content, app_name, window_title, element_name, install_id, id
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT INTO nas.audio_transcriptions_fts(transcription, device, speaker_id, install_id, source_id)
SELECT t.transcription, COALESCE(t.device,''), t.speaker_id, t.install_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_VTAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM vision_tags WHERE install_id='$INSTALL_ID' AND vision_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
check "vision_tags" "$V_VTAGS" "$SRC_VTAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-40s ✗ %s / %s files\n" "rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-40s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with date in filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirror to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-40s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-40s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" "$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-40s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-40s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
Implement and run pipe l…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports - 1 forwarded port
PORTS
1
Remote - SSH - Output
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
Forwarded Ports: 8766
1
Notifications
Sign In
Sign In
Shell Script
Editor Language Status: Inline Suggestions, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 842, Col 1
Info: Downloading VS Code Server...
Implement and run pipe logic
Session history
New session
Message actions
main.py
main.py
lets implement logic with pipes. how can I run it?
Thinking
Thinking
Let me look at the current project structure to understand what's already in place.
Bash
List project files
IN
find /volume1/screenpipe -type f | head -50 && echo "---" && ls /volume1/screenpipe
Copy code to clipboard
OUT
/volume1/screenpipe/.DS_Store
/volume1/screenpipe/screenpipe.db
/volume1/screenpipe/screenpipe_sync.sh
/volume1/screenpipe/app_settings.json
/volume1/screenpipe/.gitignore
/volume1/screenpipe/archive.db
/volume1/screenpipe/db.sqlite
/volume1/screenpipe/db.sqlite-wal
/volume1/screenpipe/db.sqlite-shm
/volume1/screenpipe/#recycle/desktop.ini
/volume1/screenpipe/#recycle/db.sqlite
/volume1/screenpipe/#recycle/Copy #1 of db.sqlite
/volume1/screenpipe/#recycle/.DS_Store
/volume1/screenpipe/#recycle/Copy #2 of db.sqlite
/volume1/screenpipe/#recycle/archive.db
/volume1/screenpipe/#recycle/Copy #1 of archive.db
/volume1/screenpipe/#recycle/Copy #2 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of archive.db
/volume1/screenpipe/#recycle/Copy #4 of archive.db
/volume1/screenpipe/#recycle/Copy #5 of archive.db
/volume1/screenpipe/#recycle/Copy #3 of db.sqlite
/volume1/screenpipe/#recycle/Copy #4 of db.sqlite
/volume1/screenpipe/#recycle/Copy #6 of archive.db
/volume1/screenpipe/#recycle/test.txt
/volume1/screenpipe/#recycle/Copy #7 of archive.db
/volume1/screenpipe/#recycle/Copy #8 of archive.db
/volume1/screenpipe/#recycle/archive.db-journal
/volume1/screenpipe/#recycle/Copy #1 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #2 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #3 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #4 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #6 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #7 of archive.db-journal
/volume1/screenpipe/#recycle/Copy #5 of db.sqlite
/volume1/screenpipe/pipes/.DS_Store
/volume1/screenpipe/app/.env
/volume1/screenpipe/app/cli.py
/volume1/screenpipe/app/.DS_Store
/volume1/screenpipe/app/db.py
/volume1/screenpipe/app/docker-compose.yml
/volume1/screenpipe/app/main.py
/volume1/screenpipe/app/requirements.txt
/volume1/screenpipe/app/Dockerfile
/volume1/screenpipe/data/.DS_Store
/volume1/screenpipe/.git/description
/volume1/screenpipe/.git/HEAD
/volume1/screenpipe/.git/index
/volume1/screenpipe/.git/COMMIT_EDITMSG
/volume1/screenpipe/#recycle/data/.DS_Store
---
app
app_settings.json
archive.db
data
db.sqlite
db.sqlite-shm
db.sqlite-wal
pipes
#recycle
screenpipe.db
screenpipe_sync.sh
Read
main.py
main.py
Bash
Check pipes directory and docker-compose
IN
ls /volume1/screenpipe/pipes/ && ls /volume1/screenpipe/app/ && cat /volume1/screenpipe/app/docker-compose.yml
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
cli.py
consumers
db.py
docker-compose.yml
Dockerfile
main.py
__pycache__
requirements.txt
static
services:
screenpipe-app:
build: .
container_name: screenpipe-app
restart: unless-stopped
ports:
- "8766:8000"
volumes:
- /volume1/screenpipe:/data
env_file:
- .env
environment:
TZ: Europe/Sofia
DB_PATH: /data/db.sqlite
sqlite-web-archive:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-archive
restart: unless-stopped
ports:
- "8767:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/archive.db"]
sqlite-web-live:
image: ghcr.io/coleifer/sqlite-web:latest
container_name: screenpipe-sqlweb-live
restart: unless-stopped
ports:
- "8768:8080"
volumes:
- /volume1/screenpipe:/data
command: ["-H", "[IP_ADDRESS]", "-r", "/data/db.sqlite"]
Read
requirements.txt
requirements.txt
Bash
Inspect a pipe directory
IN
ls /volume1/screenpipe/pipes/day-recap/ && cat /volume1/screenpipe/pipes/day-recap/pipe.json 2>/dev/null || ls /volume1/screenpipe/pipes/day-recap/
Copy code to clipboard
OUT
pipe.md
pipe.md
Read
cli.py
cli.py
Bash
List all pipes and their contents
IN
ls /volume1/screenpipe/pipes/ && for d in /volume1/screenpipe/pipes/*/; do echo "=== $d ==="; ls "$d"; done
Copy code to clipboard
OUT
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
=== /volume1/screenpipe/pipes/ai-habits/ ===
pipe.md
=== /volume1/screenpipe/pipes/day-recap/ ===
pipe.md
=== /volume1/screenpipe/pipes/meeting-summary/ ===
pipe.md
=== /volume1/screenpipe/pipes/standup-update/ ===
pipe.md
=== /volume1/screenpipe/pipes/time-breakdown/ ===
pipe.md
=== /volume1/screenpipe/pipes/video-export/ ===
pipe.md
Bash
Read pipe markdown files
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md && echo "===" && cat /volume1/screenpipe/pipes/meeting-summary/pipe.md 2>/dev/null | head -50
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
Thinking
Thinking
Bash
Read summary consumer
IN
ls /volume1/screenpipe/app/consumers/ && cat /volume1/screenpipe/app/consumers/summary.py
Copy code to clipboard
OUT
activity.py
audio.py
elements.py
__init__.py
interactions.py
ocr.py
__pycache__
report.py
summary.py
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats, browser_urls, ui_event_summary
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps used most, topics that came up repeatedly
Only report what you can verify from the data. End with:
**Next step:** [most important thing to continue]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Browser URLs visited:
{browser_urls}
## UI activity per app (clicks / keystrokes / app-switches):
{ui_events}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
urls = browser_urls(for_date, limit=20)
url_lines = "\n".join(
f"- {u['browser_url'][:100]} ({u['minutes']} min)" for u in urls
)
ui_rows = ui_event_summary(for_date)
ui_lines = "\n".join(
f"- {r['app_name']}: {r['clicks']} clicks, {r['keystrokes']} keys, {r['switches']} switches"
for r in ui_rows[:15]
)
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"browser_urls": url_lines or "(no browser data)",
"ui_events": ui_lines or "(no UI event data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Thinking
Thinking
Bash
Read all pipe.md files
IN
for f in /volume1/screenpipe/pipes/*/pipe.md; do echo "=== $f ==="; cat "$f"; echo; done
Copy code to clipboard
OUT
=== /volume1/screenpipe/pipes/ai-habits/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: AI Habits
description: "How you use AI tools — patterns and insights"
icon: "🤖"
featured: true
---
Search my recordings from the last 24 hours for AI tool usage. Use app_name filter for each tool separately: ChatGPT, Claude, Copilot, Cursor, Gemini, Perplexity. Use limit=5 per search, max 6 searches total.
Read screenpipe skill first.
Use this exact format:
## AI Tools Used
- List each tool with approximate time spent (e.g. "Claude: ~45min")
## What I Used Them For
- For each tool: coding, writing, research, or brainstorming
## Usage Patterns
- Do I switch between tools? Use them in bursts or steadily?
## Effectiveness
- Which tool appeared alongside completed work vs. abandoned attempts
If no AI usage is found, say so clearly. End with: "**Tip:** [one suggestion to use AI tools more effectively]"
=== /volume1/screenpipe/pipes/day-recap/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
=== /volume1/screenpipe/pipes/meeting-summary/pipe.md ===
---
schedule: manual
enabled: true
template: true
title: Meeting Summary
description: "Summarize meeting transcript with key takeaways and action items"
icon: "🤝"
featured: false
---
Summarize the meeting transcript provided in the context. Include key takeaways and action items. If the meeting is marked as ongoing, note that and summarize what's available so far.
Read screenpipe skill first.
Use this exact format:
## Meeting Summary
One sentence: what this meeting was about.
## Key Takeaways
- Top 3-5 important points discussed
- Include who said what when relevant
## Action Items
- [ ] Task — assigned to whom, deadline if mentioned
- [ ] Task — assigned to whom
## Decisions Made
- List any decisions or agreements reached
## Open Questions
- Anything unresolved or needing follow-up
Keep it concise and actionable.
=== /volume1/screenpipe/pipes/standup-update/pipe.md ===
---
schedu...
|
NULL
|
NULL
|
NULL
|
NULL
|