|
80859
|
2140
|
10
|
2026-04-25T15:08:03.387001+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777129683387_m2.jpg...
|
Firefox
|
mikrotik - Google Search — Personal
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
New Tab
mikrotik - Google Search
mikrotik - Google Search
Close tab
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Accessibility feedback
Accessibility feedback
Go to Google Home
mikrotik
mikrotik
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Short videos
Short videos
Videos
Videos
Forums
Forums
News
News
More filters
More
Search Results
Search Results
Web result with site links
Web result with site links
MikroTik · Routers and Wireless MikroTik https://mikrotik.com
MikroTik · Routers and Wireless
MikroTik · Routers and Wireless
MikroTik
https://mikrotik.com
About this result
MikroTik
offers routers, switches, and wireless systems for every type of network – from home offices and small businesses to carrier-grade ISP infrastructure.
Downloads
Downloads
Downloads
Find your hardware model and download factory dedicated ...
Products
Products
Products
MikroTik makes networking hardware and software, which is ...
WinBox
WinBox
WinBox
Advanced desktop utility to manage RouterOS limitless ...
RouterOS
RouterOS
RouterOS
MikroTik makes networking hardware and software, which is ...
LOG IN
LOG IN
LOG IN
Mikrotik develops high performance routers and ...
More results from mikrotik.com »
More results from mikrotik.com »
Downloads
Downloads
Downloads
Find your hardware model and download factory dedicated ...
Products...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (7) - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.03856383,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.07513298,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.0,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.013297873,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.0,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.013297873,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.0,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.013297873,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.0,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.013297873,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.0,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.013297873,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.0,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.0,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.013297873,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.0,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.013297873,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.0,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.013297873,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.5857941,"width":0.113696806,"height":0.032721467},"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.013297873,"top":0.5969673,"width":0.014960106,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"mikrotik - Google Search","depth":4,"bounds":{"left":0.0,"top":0.61851555,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"mikrotik - Google Search","depth":5,"bounds":{"left":0.013297873,"top":0.62968874,"width":0.043218084,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.10139628,"top":0.6256983,"width":0.007978723,"height":0.01915403},"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.0028257978,"top":0.6528332,"width":0.108211435,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":7,"bounds":{"left":0.11735372,"top":0.0981644,"width":0.03656915,"height":0.035115723},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":8,"bounds":{"left":0.12283909,"top":0.101356745,"width":0.025598405,"height":0.028731046},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility help","depth":7,"bounds":{"left":0.11735372,"top":0.0981644,"width":0.03656915,"height":0.035115723},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility help","depth":8,"bounds":{"left":0.123005316,"top":0.101356745,"width":0.025265958,"height":0.028731046},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Accessibility feedback","depth":7,"bounds":{"left":0.11735372,"top":0.12051077,"width":0.03656915,"height":0.035115723},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Accessibility feedback","depth":8,"bounds":{"left":0.123005316,"top":0.123703115,"width":0.025265958,"height":0.028731046},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to Google Home","depth":10,"bounds":{"left":0.13829787,"top":0.08060654,"width":0.030585106,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"mikrotik","depth":9,"bounds":{"left":0.19049202,"top":0.07342378,"width":0.21875,"height":0.03990423},"value":"mikrotik","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"mikrotik","depth":10,"bounds":{"left":0.19049202,"top":0.08539505,"width":0.018949468,"height":0.016360734},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":9,"bounds":{"left":0.40924203,"top":0.07342378,"width":0.015957447,"height":0.03990423},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by voice","depth":9,"bounds":{"left":0.4268617,"top":0.083798885,"width":0.013297873,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search by image","depth":9,"bounds":{"left":0.4401596,"top":0.083798885,"width":0.013297873,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":9,"bounds":{"left":0.45478722,"top":0.07342378,"width":0.01462766,"height":0.03990423},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":9,"bounds":{"left":0.9640958,"top":0.07741421,"width":0.013297873,"height":0.031923383},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":8,"bounds":{"left":0.9800532,"top":0.07741421,"width":0.013297873,"height":0.031923383},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"AI Mode","depth":11,"bounds":{"left":0.1861702,"top":0.12210695,"width":0.025930852,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI Mode","depth":13,"bounds":{"left":0.19015957,"top":0.13647246,"width":0.017952127,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All","depth":11,"bounds":{"left":0.21210106,"top":0.12210695,"width":0.013464096,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":14,"bounds":{"left":0.21609043,"top":0.13647246,"width":0.005485372,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Images","depth":11,"bounds":{"left":0.22556517,"top":0.12210695,"width":0.023769947,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Images","depth":13,"bounds":{"left":0.22955452,"top":0.13647246,"width":0.015791224,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Short videos","depth":11,"bounds":{"left":0.24933511,"top":0.12210695,"width":0.035738032,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Short videos","depth":13,"bounds":{"left":0.25332448,"top":0.13647246,"width":0.027759308,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Videos","depth":11,"bounds":{"left":0.28507313,"top":0.12210695,"width":0.022772606,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Videos","depth":13,"bounds":{"left":0.2890625,"top":0.13647246,"width":0.014793883,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forums","depth":11,"bounds":{"left":0.30784574,"top":0.12210695,"width":0.024102394,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forums","depth":13,"bounds":{"left":0.3118351,"top":0.13647246,"width":0.016123671,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"News","depth":11,"bounds":{"left":0.33194813,"top":0.12210695,"width":0.019946808,"height":0.03830806},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"News","depth":13,"bounds":{"left":0.3359375,"top":0.13647246,"width":0.011968086,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More filters","depth":11,"bounds":{"left":0.35189494,"top":0.12210695,"width":0.025099734,"height":0.03830806},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":14,"bounds":{"left":0.3558843,"top":0.13647246,"width":0.011136968,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Search Results","depth":8,"bounds":{"left":0.113696806,"top":0.16041501,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search Results","depth":9,"bounds":{"left":0.113696806,"top":0.16041501,"width":0.03158245,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Web result with site links","depth":13,"bounds":{"left":0.19015957,"top":0.20031923,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web result with site links","depth":14,"bounds":{"left":0.19015957,"top":0.20071827,"width":0.09524601,"height":0.021947326},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"MikroTik · Routers and Wireless MikroTik https://mikrotik.com","depth":14,"bounds":{"left":0.19015957,"top":0.1943336,"width":0.09208777,"height":0.035115723},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"MikroTik · Routers and Wireless","depth":15,"bounds":{"left":0.19015957,"top":0.21468475,"width":0.09208777,"height":0.024740623},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MikroTik · Routers and Wireless","depth":16,"bounds":{"left":0.19015957,"top":0.21907422,"width":0.09208777,"height":0.020351157},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MikroTik","depth":19,"bounds":{"left":0.20345744,"top":0.1859537,"width":0.017453458,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"https://mikrotik.com","depth":19,"bounds":{"left":0.20345744,"top":0.2019154,"width":0.034408245,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"About this result","depth":14,"bounds":{"left":0.23986037,"top":0.19872306,"width":0.00930851,"height":0.015961692},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MikroTik","depth":15,"bounds":{"left":0.19015957,"top":0.2442139,"width":0.019115692,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"offers routers, switches, and wireless systems for every type of network – from home offices and small businesses to carrier-grade ISP infrastructure.","depth":14,"bounds":{"left":0.19015957,"top":0.2442139,"width":0.20927526,"height":0.030327214},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Downloads","depth":16,"bounds":{"left":0.19647606,"top":0.3008779,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Downloads","depth":17,"bounds":{"left":0.19647606,"top":0.3028731,"width":0.029920213,"height":0.018355945},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Downloads","depth":18,"bounds":{"left":0.19647606,"top":0.3028731,"width":0.029920213,"height":0.018355945},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find your hardware model and download factory dedicated ...","depth":17,"bounds":{"left":0.19647606,"top":0.32402235,"width":0.12616356,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Products","depth":16,"bounds":{"left":0.19647606,"top":0.3575419,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Products","depth":17,"bounds":{"left":0.19647606,"top":0.35953712,"width":0.024268618,"height":0.018355945},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Products","depth":18,"bounds":{"left":0.19647606,"top":0.35953712,"width":0.024268618,"height":0.018355945},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MikroTik makes networking hardware and software, which is ...","depth":17,"bounds":{"left":0.19647606,"top":0.38068634,"width":0.12915559,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"WinBox","depth":16,"bounds":{"left":0.19647606,"top":0.4142059,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"WinBox","depth":17,"bounds":{"left":0.19647606,"top":0.4162011,"width":0.020279255,"height":0.018355945},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"WinBox","depth":18,"bounds":{"left":0.19647606,"top":0.4162011,"width":0.020279255,"height":0.018355945},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advanced desktop utility to manage RouterOS limitless ...","depth":17,"bounds":{"left":0.19647606,"top":0.43735036,"width":0.11851729,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"RouterOS","depth":16,"bounds":{"left":0.19647606,"top":0.4708699,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"RouterOS","depth":17,"bounds":{"left":0.19647606,"top":0.47286513,"width":0.026263298,"height":0.018355945},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"RouterOS","depth":18,"bounds":{"left":0.19647606,"top":0.47286513,"width":0.026263298,"height":0.018355945},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MikroTik makes networking hardware and software, which is ...","depth":17,"bounds":{"left":0.19647606,"top":0.49401435,"width":0.12915559,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"LOG IN","depth":16,"bounds":{"left":0.19647606,"top":0.5275339,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LOG IN","depth":17,"bounds":{"left":0.19647606,"top":0.52952915,"width":0.019780586,"height":0.018355945},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LOG IN","depth":18,"bounds":{"left":0.19647606,"top":0.52952915,"width":0.019780586,"height":0.018355945},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mikrotik develops high performance routers and ...","depth":17,"bounds":{"left":0.19647606,"top":0.5506784,"width":0.103390954,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"More results from mikrotik.com »","depth":17,"bounds":{"left":0.19614361,"top":0.58339983,"width":0.0674867,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More results from mikrotik.com »","depth":18,"bounds":{"left":0.19614361,"top":0.5865922,"width":0.0674867,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Downloads","depth":16,"bounds":{"left":0.19647606,"top":0.3008779,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Downloads","depth":17,"bounds":{"left":0.19647606,"top":0.3028731,"width":0.029920213,"height":0.018355945},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Downloads","depth":18,"bounds":{"left":0.19647606,"top":0.3028731,"width":0.029920213,"height":0.018355945},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Find your hardware model and download factory dedicated ...","depth":17,"bounds":{"left":0.19647606,"top":0.32402235,"width":0.12616356,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Products","depth":16,"bounds":{"left":0.19647606,"top":0.3575419,"width":0.19015957,"height":0.0207502},"help_text":"","role_description":"heading","subrole":"AXUnknown"}]...
|
1883471080486375345
|
6387535564381882895
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
New Tab
mikrotik - Google Search
mikrotik - Google Search
Close tab
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
Accessibility help
Accessibility help
Accessibility feedback
Accessibility feedback
Go to Google Home
mikrotik
mikrotik
Clear
Search by voice
Search by image
Search
Google apps
Google Account: Lukáš Koválik ([EMAIL])
AI Mode
AI Mode
All
All
Images
Images
Short videos
Short videos
Videos
Videos
Forums
Forums
News
News
More filters
More
Search Results
Search Results
Web result with site links
Web result with site links
MikroTik · Routers and Wireless MikroTik https://mikrotik.com
MikroTik · Routers and Wireless
MikroTik · Routers and Wireless
MikroTik
https://mikrotik.com
About this result
MikroTik
offers routers, switches, and wireless systems for every type of network – from home offices and small businesses to carrier-grade ISP infrastructure.
Downloads
Downloads
Downloads
Find your hardware model and download factory dedicated ...
Products
Products
Products
MikroTik makes networking hardware and software, which is ...
WinBox
WinBox
WinBox
Advanced desktop utility to manage RouterOS limitless ...
RouterOS
RouterOS
RouterOS
MikroTik makes networking hardware and software, which is ...
LOG IN
LOG IN
LOG IN
Mikrotik develops high performance routers and ...
More results from mikrotik.com »
More results from mikrotik.com »
Downloads
Downloads
Downloads
Find your hardware model and download factory dedicated ...
Products...
|
80858
|
|
23989
|
518
|
36
|
2026-04-15T11:53:51.578637+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776254031578_m1.jpg...
|
Finder
|
lukas
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
Applications
9 Apr 2026 at 20:08
--
Folder
CascadeProjects
22 Oct 2025 at 9:35
--
Folder
clip.mp4
12 Apr 2026 at 12:50
Zero bytes
MPEG-4 movie
Desktop
Today at 11:22
--
Folder
DEV
27 Oct 2025 at 9:24
--
Folder
Documents
26 Mar 2026 at 14:40
--
Folder
Downloads
8 Apr 2026 at 20:46
--
Folder
frame.jpg
12 Apr 2026 at 12:51
Zero bytes
JPEG image
iCloud Drive (Archive)
30 Sep 2022 at 16:18
--
Folder
Script Editor
2 Mar 2023 at 9:04
--
Folder
jiminny
3 Nov 2025 at 11:35
--
Folder
Keychron_Screen
17 Mar 2026 at 20:27
--
Folder...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Favourites","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"jiminny","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"AirDrop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Recents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Applications","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Documents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Desktop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Downloads","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"iCloud","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"iCloud Drive","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Sync folder","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Locations","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":6,"role_description":"text"},{"role":"AXButton","text":"Eject","depth":6,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Network","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Tags","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"CRM","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Orange","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Red","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Yellow","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Green","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Blue","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Purple","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"All Tags…","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Name","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Date Modified","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Size","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Kind","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Applications","depth":7,"value":"Applications","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9 Apr 2026 at 20:08","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"CascadeProjects","depth":7,"value":"CascadeProjects","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"22 Oct 2025 at 9:35","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"clip.mp4","depth":7,"value":"clip.mp4","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"12 Apr 2026 at 12:50","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"MPEG-4 movie","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Desktop","depth":7,"value":"Desktop","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 11:22","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"DEV","depth":7,"value":"DEV","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"27 Oct 2025 at 9:24","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Documents","depth":7,"value":"Documents","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"26 Mar 2026 at 14:40","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Downloads","depth":7,"value":"Downloads","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8 Apr 2026 at 20:46","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"frame.jpg","depth":7,"value":"frame.jpg","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"12 Apr 2026 at 12:51","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"JPEG image","depth":7,"role_description":"text"},{"role":"AXTextField","text":"iCloud Drive (Archive)","depth":7,"value":"iCloud Drive (Archive)","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"30 Sep 2022 at 16:18","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Script Editor","depth":7,"value":"Script Editor","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Mar 2023 at 9:04","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"jiminny","depth":7,"value":"jiminny","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Nov 2025 at 11:35","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Keychron_Screen","depth":7,"value":"Keychron_Screen","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"17 Mar 2026 at 20:27","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"}]...
|
6579321834935572893
|
9185940282271131481
|
click
|
accessibility
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
Applications
9 Apr 2026 at 20:08
--
Folder
CascadeProjects
22 Oct 2025 at 9:35
--
Folder
clip.mp4
12 Apr 2026 at 12:50
Zero bytes
MPEG-4 movie
Desktop
Today at 11:22
--
Folder
DEV
27 Oct 2025 at 9:24
--
Folder
Documents
26 Mar 2026 at 14:40
--
Folder
Downloads
8 Apr 2026 at 20:46
--
Folder
frame.jpg
12 Apr 2026 at 12:51
Zero bytes
JPEG image
iCloud Drive (Archive)
30 Sep 2022 at 16:18
--
Folder
Script Editor
2 Mar 2023 at 9:04
--
Folder
jiminny
3 Nov 2025 at 11:35
--
Folder
Keychron_Screen
17 Mar 2026 at 20:27
--
Folder...
|
23987
|
|
23963
|
519
|
20
|
2026-04-15T11:53:15.080266+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776253995080_m2.jpg...
|
Finder
|
lukas
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Applications
9 Apr 2026 at 20:08
--
Folder
CascadeProjects
22 Oct 2025 at 9:35
--
Folder
clip.mp4...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Favourites","depth":6,"bounds":{"left":0.32304686,"top":0.5548611,"width":0.0671875,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"jiminny","depth":6,"bounds":{"left":0.33242187,"top":0.57222223,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"AirDrop","depth":6,"bounds":{"left":0.33242187,"top":0.59166664,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Recents","depth":6,"bounds":{"left":0.33242187,"top":0.6111111,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Applications","depth":6,"bounds":{"left":0.33242187,"top":0.63055557,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Documents","depth":6,"bounds":{"left":0.33242187,"top":0.65,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Desktop","depth":6,"bounds":{"left":0.33242187,"top":0.66944444,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Downloads","depth":6,"bounds":{"left":0.33242187,"top":0.6888889,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":6,"bounds":{"left":0.33242187,"top":0.7083333,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"iCloud","depth":6,"bounds":{"left":0.32304686,"top":0.7326389,"width":0.0671875,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"iCloud Drive","depth":6,"bounds":{"left":0.33242187,"top":0.75,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Sync folder","depth":6,"bounds":{"left":0.33242187,"top":0.76944447,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Locations","depth":6,"bounds":{"left":0.32304686,"top":0.79375,"width":0.0671875,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.33242187,"top":0.8111111,"width":0.0453125,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Eject","depth":6,"bounds":{"left":0.37851563,"top":0.8125,"width":0.005078125,"height":0.008333334},"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Network","depth":6,"bounds":{"left":0.33242187,"top":0.83055556,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Tags","depth":6,"bounds":{"left":0.32304686,"top":0.85486114,"width":0.0671875,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"CRM","depth":6,"bounds":{"left":0.33242187,"top":0.87222224,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Orange","depth":6,"bounds":{"left":0.33242187,"top":0.89166665,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Red","depth":6,"bounds":{"left":0.33242187,"top":0.9111111,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Yellow","depth":6,"bounds":{"left":0.33242187,"top":0.9305556,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Green","depth":6,"bounds":{"left":0.33242187,"top":0.95,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Blue","depth":6,"bounds":{"left":0.33242187,"top":0.96944445,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Purple","depth":6,"bounds":{"left":0.33242187,"top":0.98888886,"width":0.05234375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"All Tags…","depth":6,"bounds":{"left":0.33242187,"top":1.0,"width":0.05234375,"height":-0.008333325},"role_description":"text"},{"role":"AXTextField","text":"Applications","depth":7,"bounds":{"left":0.41484374,"top":0.425,"width":0.032421876,"height":0.011111111},"value":"Applications","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9 Apr 2026 at 20:08","depth":7,"bounds":{"left":0.6152344,"top":0.425,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"bounds":{"left":0.7132813,"top":0.425,"width":0.006640625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"bounds":{"left":0.72382814,"top":0.425,"width":0.016796876,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"CascadeProjects","depth":7,"bounds":{"left":0.41484374,"top":0.43888888,"width":0.043359376,"height":0.011111111},"value":"CascadeProjects","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"22 Oct 2025 at 9:35","depth":7,"bounds":{"left":0.6152344,"top":0.43888888,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"bounds":{"left":0.7132813,"top":0.43888888,"width":0.006640625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"bounds":{"left":0.72382814,"top":0.43888888,"width":0.016796876,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"clip.mp4","depth":7,"bounds":{"left":0.41484374,"top":0.45277777,"width":0.023828125,"height":0.011111111},"value":"clip.mp4","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-5877991623875165838
|
-1229442974329811107
|
click
|
accessibility
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Applications
9 Apr 2026 at 20:08
--
Folder
CascadeProjects
22 Oct 2025 at 9:35
--
Folder
clip.mp4...
|
NULL
|
|
23962
|
518
|
24
|
2026-04-15T11:53:12.739912+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776253992739_m1.jpg...
|
Finder
|
lukas
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
Applications
9 Apr 2026 at 20:08
--
Folder
CascadeProjects
22 Oct 2025 at 9:35
--
Folder
clip.mp4
12 Apr 2026 at 12:50
Zero bytes
MPEG-4 movie
Desktop
Today at 11:22
--
Folder
DEV
27 Oct 2025 at 9:24
--
Folder
Documents
26 Mar 2026 at 14:40
--
Folder
Downloads
8 Apr 2026 at 20:46
--
Folder
frame.jpg
12 Apr 2026 at 12:51
Zero bytes
JPEG image
iCloud Drive (Archive)
30 Sep 2022 at 16:18
--
Folder
Script Editor
2 Mar 2023 at 9:04
--
Folder
jiminny
3 Nov 2025 at 11:35
--
Folder
Keychron_Screen
17 Mar 2026 at 20:27
--
Folder
Movies
12 Feb 2024 at 22:56
--
Folder
Music
25 Sep 2023 at 11:52
--
Folder
node_modules
20 Mar 2026 at 18:47
--
Folder
Pictures
25 Sep 2023 at 11:52
--
Folder
Postman
8 Nov 2021 at 16:01
--
Folder...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Favourites","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"jiminny","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"AirDrop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Recents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Applications","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Documents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Desktop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Downloads","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"iCloud","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"iCloud Drive","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Sync folder","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Locations","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":6,"role_description":"text"},{"role":"AXButton","text":"Eject","depth":6,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Network","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Tags","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"CRM","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Orange","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Red","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Yellow","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Green","depth":6,"bounds":{"left":0.17638889,"top":0.0,"width":0.093055554,"height":0.017777778},"role_description":"text"},{"role":"AXStaticText","text":"Blue","depth":6,"bounds":{"left":0.17638889,"top":0.0,"width":0.093055554,"height":0.017777778},"role_description":"text"},{"role":"AXStaticText","text":"Purple","depth":6,"bounds":{"left":0.17638889,"top":0.0,"width":0.093055554,"height":0.017777778},"role_description":"text"},{"role":"AXStaticText","text":"All Tags…","depth":6,"bounds":{"left":0.17638889,"top":0.013333334,"width":0.093055554,"height":0.017777778},"role_description":"text"},{"role":"AXStaticText","text":"Name","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Date Modified","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Size","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Kind","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Applications","depth":7,"value":"Applications","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9 Apr 2026 at 20:08","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"CascadeProjects","depth":7,"value":"CascadeProjects","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"22 Oct 2025 at 9:35","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"clip.mp4","depth":7,"value":"clip.mp4","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"12 Apr 2026 at 12:50","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"MPEG-4 movie","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Desktop","depth":7,"value":"Desktop","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 11:22","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"DEV","depth":7,"value":"DEV","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"27 Oct 2025 at 9:24","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Documents","depth":7,"value":"Documents","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"26 Mar 2026 at 14:40","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Downloads","depth":7,"value":"Downloads","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8 Apr 2026 at 20:46","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"frame.jpg","depth":7,"value":"frame.jpg","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"12 Apr 2026 at 12:51","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"JPEG image","depth":7,"role_description":"text"},{"role":"AXTextField","text":"iCloud Drive (Archive)","depth":7,"value":"iCloud Drive (Archive)","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"30 Sep 2022 at 16:18","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Script Editor","depth":7,"value":"Script Editor","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2 Mar 2023 at 9:04","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"jiminny","depth":7,"value":"jiminny","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Nov 2025 at 11:35","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Keychron_Screen","depth":7,"value":"Keychron_Screen","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"17 Mar 2026 at 20:27","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Movies","depth":7,"value":"Movies","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"12 Feb 2024 at 22:56","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Music","depth":7,"value":"Music","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"25 Sep 2023 at 11:52","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"node_modules","depth":7,"value":"node_modules","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"20 Mar 2026 at 18:47","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Pictures","depth":7,"value":"Pictures","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"25 Sep 2023 at 11:52","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"Postman","depth":7,"value":"Postman","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8 Nov 2021 at 16:01","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"--","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"}]...
|
8260712683312851013
|
8885923486809776969
|
click
|
accessibility
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
Applications
9 Apr 2026 at 20:08
--
Folder
CascadeProjects
22 Oct 2025 at 9:35
--
Folder
clip.mp4
12 Apr 2026 at 12:50
Zero bytes
MPEG-4 movie
Desktop
Today at 11:22
--
Folder
DEV
27 Oct 2025 at 9:24
--
Folder
Documents
26 Mar 2026 at 14:40
--
Folder
Downloads
8 Apr 2026 at 20:46
--
Folder
frame.jpg
12 Apr 2026 at 12:51
Zero bytes
JPEG image
iCloud Drive (Archive)
30 Sep 2022 at 16:18
--
Folder
Script Editor
2 Mar 2023 at 9:04
--
Folder
jiminny
3 Nov 2025 at 11:35
--
Folder
Keychron_Screen
17 Mar 2026 at 20:27
--
Folder
Movies
12 Feb 2024 at 22:56
--
Folder
Music
25 Sep 2023 at 11:52
--
Folder
node_modules
20 Mar 2026 at 18:47
--
Folder
Pictures
25 Sep 2023 at 11:52
--
Folder
Postman
8 Nov 2021 at 16:01
--
Folder...
|
23960
|
|
75495
|
1883
|
0
|
2026-04-24T06:31:25.822611+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777012285822_m1.jpg...
|
iTerm2
|
ls
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu Apr 23 14:01:29 on ttys009
Poetry Last login: Thu Apr 23 14:01:29 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe/data/data
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-23
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $ ll
total 338296
drwxr-xr-x 106 lukas staff 3392 24 Apr 09:20 .
drwxr-xr-x 17 lukas staff 544 24 Apr 09:19 ..
-rw-r--r-- 1 lukas staff 174550 23 Apr 11:38 1776933481776_m1.jpg
-rw-r--r-- 1 lukas staff 1448572 23 Apr 09:24 compact_monitor_1_1776925466477.mp4
-rw-r--r-- 1 lukas staff 2157204 23 Apr 09:29 compact_monitor_1_1776925771961.mp4
-rw-r--r-- 1 lukas staff 785851 23 Apr 09:34 compact_monitor_1_1776926078542.mp4
-rw-r--r-- 1 lukas staff 319924 23 Apr 09:39 compact_monitor_1_1776926389122.mp4
-rw-r--r-- 1 lukas staff 178437 23 Apr 09:44 compact_monitor_1_1776926696343.mp4
-rw-r--r-- 1 lukas staff 182316 23 Apr 09:50 compact_monitor_1_1776927001989.mp4
-rw-r--r-- 1 lukas staff 475405 23 Apr 09:55 compact_monitor_1_1776927311821.mp4
-rw-r--r-- 1 lukas staff 3670216 23 Apr 10:00 compact_monitor_1_1776927616817.mp4
-rw-r--r-- 1 lukas staff 1311845 23 Apr 10:05 compact_monitor_1_1776927930717.mp4
-rw-r--r-- 1 lukas staff 1768745 23 Apr 10:10 compact_monitor_1_1776928242002.mp4
-rw-r--r-- 1 lukas staff 942473 23 Apr 10:15 compact_monitor_1_1776928549085.mp4
-rw-r--r-- 1 lukas staff 911130 23 Apr 10:20 compact_monitor_1_1776928854473.mp4
-rw-r--r-- 1 lukas staff 1249531 23 Apr 10:26 compact_monitor_1_1776929165912.mp4
-rw-r--r-- 1 lukas staff 2106654 23 Apr 10:31 compact_monitor_1_1776929476115.mp4
-rw-r--r-- 1 lukas staff 1633583 23 Apr 10:36 compact_monitor_1_1776929781778.mp4
-rw-r--r-- 1 lukas staff 1186578 23 Apr 10:41 compact_monitor_1_1776930087801.mp4
-rw-r--r-- 1 lukas staff 322993 23 Apr 10:46 compact_monitor_1_1776930392335.mp4
-rw-r--r-- 1 lukas staff 120434 23 Apr 10:51 compact_monitor_1_1776930696294.mp4
-rw-r--r-- 1 lukas staff 111489 23 Apr 10:56 compact_monitor_1_1776931004441.mp4
-rw-r--r-- 1 lukas staff 560588 23 Apr 11:01 compact_monitor_1_1776931314879.mp4
-rw-r--r-- 1 lukas staff 2146373 23 Apr 11:07 compact_monitor_1_1776931618003.mp4
-rw-r--r-- 1 lukas staff 1276021 23 Apr 11:12 compact_monitor_1_1776931930806.mp4
-rw-r--r-- 1 lukas staff 274120 23 Apr 11:17 compact_monitor_1_1776932235717.mp4
-rw-r--r-- 1 lukas staff 212162 23 Apr 11:22 compact_monitor_1_1776932541353.mp4
-rw-r--r-- 1 lukas staff 639071 23 Apr 11:27 compact_monitor_1_1776932847264.mp4
-rw-r--r-- 1 lukas staff 315645 23 Apr 11:32 compact_monitor_1_1776933174068.mp4
-rw-r--r-- 1 lukas staff 518635 23 Apr 11:38 compact_monitor_1_1776933492233.mp4
-rw-r--r-- 1 lukas staff 1886880 23 Apr 11:43 compact_monitor_1_1776933806263.mp4
-rw-r--r-- 1 lukas staff 2316900 23 Apr 11:48 compact_monitor_1_1776934133065.mp4
-rw-r--r-- 1 lukas staff 1589469 23 Apr 11:54 compact_monitor_1_1776934449640.mp4
-rw-r--r-- 1 lukas staff 592352 23 Apr 11:59 compact_monitor_1_1776934755385.mp4
-rw-r--r-- 1 lukas staff 1631938 23 Apr 12:04 compact_monitor_1_1776935058652.mp4
-rw-r--r-- 1 lukas staff 6099603 23 Apr 12:24 compact_monitor_1_1776936289062.mp4
-rw-r--r-- 1 lukas staff 91125 23 Apr 12:35 compact_monitor_1_1776936919782.mp4
-rw-r--r-- 1 lukas staff 2955581 23 Apr 12:40 compact_monitor_1_1776937224602.mp4
-rw-r--r-- 1 lukas staff 3002373 23 Apr 12:45 compact_monitor_1_1776937538337.mp4
-rw-r--r-- 1 lukas staff 3116117 23 Apr 12:50 compact_monitor_1_1776937842939.mp4
-rw-r--r-- 1 lukas staff 2426878 23 Apr 12:55 compact_monitor_1_1776938150380.mp4
-rw-r--r-- 1 lukas staff 2028056 23 Apr 13:01 compact_monitor_1_1776938459676.mp4
-rw-r--r-- 1 lukas staff 2104678 23 Apr 13:06 compact_monitor_1_1776938769006.mp4
-rw-r--r-- 1 lukas staff 3004512 23 Apr 13:11 compact_monitor_1_1776939078771.mp4
-rw-r--r-- 1 lukas staff 1643140 23 Apr 13:16 compact_monitor_1_1776939389326.mp4
-rw-r--r-- 1 lukas staff 1923058 23 Apr 13:21 compact_monitor_1_1776939706398.mp4
-rw-r--r-- 1 lukas staff 900757 23 Apr 13:26 compact_monitor_1_1776940011813.mp4
-rw-r--r-- 1 lukas staff 2964075 23 Apr 13:32 compact_monitor_1_1776940319106.mp4
-rw-r--r-- 1 lukas staff 2419466 23 Apr 13:37 compact_monitor_1_1776940628353.mp4
-rw-r--r-- 1 lukas staff 2447997 23 Apr 13:42 compact_monitor_1_1776940941730.mp4
-rw-r--r-- 1 lukas staff 2202220 23 Apr 13:47 compact_monitor_1_1776941248366.mp4
-rw-r--r-- 1 lukas staff 2309716 23 Apr 13:52 compact_monitor_1_1776941558220.mp4
-rw-r--r-- 1 lukas staff 2049791 23 Apr 13:57 compact_monitor_1_1776941868192.mp4
-rw-r--r-- 1 lukas staff 6097615 24 Apr 09:20 compact_monitor_1_1777011631828.mp4
-rw-r--r-- 1 lukas staff 215938 23 Apr 09:24 compact_monitor_2_1776925467316.mp4
-rw-r--r-- 1 lukas staff 3956084 23 Apr 09:29 compact_monitor_2_1776925774333.mp4
-rw-r--r-- 1 lukas staff 3998164 23 Apr 09:34 compact_monitor_2_1776926081685.mp4
-rw-r--r-- 1 lukas staff 2446471 23 Apr 09:39 compact_monitor_2_1776926391115.mp4
-rw-r--r-- 1 lukas staff 776043 23 Apr 09:44 compact_monitor_2_1776926697217.mp4
-rw-r--r-- 1 lukas staff 802594 23 Apr 09:50 compact_monitor_2_1776927003100.mp4
-rw-r--r-- 1 lukas staff 1453164 23 Apr 09:55 compact_monitor_2_1776927313533.mp4
-rw-r--r-- 1 lukas staff 1449750 23 Apr 10:00 compact_monitor_2_1776927621638.mp4
-rw-r--r-- 1 lukas staff 1635019 23 Apr 10:05 compact_monitor_2_1776927933130.mp4
-rw-r--r-- 1 lukas staff 595843 23 Apr 10:10 compact_monitor_2_1776928245303.mp4
-rw-r--r-- 1 lukas staff 531088 23 Apr 10:15 compact_monitor_2_1776928550520.mp4
-rw-r--r-- 1 lukas staff 846515 23 Apr 10:20 compact_monitor_2_1776928856922.mp4
-rw-r--r-- 1 lukas staff 904088 23 Apr 10:26 compact_monitor_2_1776929169922.mp4
-rw-r--r-- 1 lukas staff 786829 23 Apr 10:31 compact_monitor_2_1776929479675.mp4
-rw-r--r-- 1 lukas staff 729181 23 Apr 10:36 compact_monitor_2_1776929783409.mp4
-rw-r--r-- 1 lukas staff 1116843 23 Apr 10:41 compact_monitor_2_1776930090240.mp4
-rw-r--r-- 1 lukas staff 889822 23 Apr 10:46 compact_monitor_2_1776930393454.mp4
-rw-r--r-- 1 lukas staff 444250 23 Apr 10:51 compact_monitor_2_1776930697139.mp4
-rw-r--r-- 1 lukas staff 1024242 23 Apr 10:56 compact_monitor_2_1776931006436.mp4
-rw-r--r-- 1 lukas staff 1206096 23 Apr 11:01 compact_monitor_2_1776931316182.mp4
-rw-r--r-- 1 lukas staff 1249893 23 Apr 11:07 compact_monitor_2_1776931621999.mp4
-rw-r--r-- 1 lukas staff 401526 23 Apr 11:12 compact_monitor_2_1776931932870.mp4
-rw-r--r-- 1 lukas staff 982256 23 Apr 11:17 compact_monitor_2_1776932236802.mp4
-rw-r--r-- 1 lukas staff 1131582 23 Apr 11:22 compact_monitor_2_1776932542205.mp4
-rw-r--r-- 1 lukas staff 808822 23 Apr 11:27 compact_monitor_2_1776932849317.mp4
-rw-r--r-- 1 lukas staff 442538 23 Apr 11:32 compact_monitor_2_1776933176662.mp4
-rw-r--r-- 1 lukas staff 675274 23 Apr 11:38 compact_monitor_2_1776933495384.mp4
-rw-r--r-- 1 lukas staff 1534516 23 Apr 11:43 compact_monitor_2_1776933812317.mp4
-rw-r--r-- 1 lukas staff 1657590 23 Apr 11:49 compact_monitor_2_1776934138529.mp4
-rw-r--r-- 1 lukas staff 1222887 23 Apr 11:54 compact_monitor_2_1776934453154.mp4
-rw-r--r-- 1 lukas staff 1003999 23 Apr 11:59 compact_monitor_2_1776934756922.mp4
-rw-r--r-- 1 lukas staff 1168918 23 Apr 12:04 compact_monitor_2_1776935062292.mp4
-rw-r--r-- 1 lukas staff 5755378 23 Apr 12:25 compact_monitor_2_1776936297908.mp4
-rw-r--r-- 1 lukas staff 302577 23 Apr 12:25 compact_monitor_2_1776936305094.mp4
-rw-r--r-- 1 lukas staff 1710485 23 Apr 12:35 compact_monitor_2_1776936920837.mp4
-rw-r--r-- 1 lukas staff 2705135 23 Apr 12:40 compact_monitor_2_1776937228721.mp4
-rw-r--r-- 1 lukas staff 1751314 23 Apr 12:45 compact_monitor_2_1776937539934.mp4
-rw-r--r-- 1 lukas staff 924709 23 Apr 12:50 compact_monitor_2_1776937844858.mp4
-rw-r--r-- 1 lukas staff 1285623 23 Apr 12:55 compact_monitor_2_1776938151831.mp4
-rw-r--r-- 1 lukas staff 405857 23 Apr 13:01 compact_monitor_2_1776938461195.mp4
-rw-r--r-- 1 lukas staff 407926 23 Apr 13:06 compact_monitor_2_1776938770290.mp4
-rw-r--r-- 1 lukas staff 958635 23 Apr 13:11 compact_monitor_2_1776939080379.mp4
-rw-r--r-- 1 lukas staff 3622447 23 Apr 13:16 compact_monitor_2_1776939392822.mp4
-rw-r--r-- 1 lukas staff 1850262 23 Apr 13:21 compact_monitor_2_1776939708714.mp4
-rw-r--r-- 1 lukas staff 4725657 23 Apr 13:26 compact_monitor_2_1776940013773.mp4
-rw-r--r-- 1 lukas staff 3590913 23 Apr 13:32 compact_monitor_2_1776940321454.mp4
-rw-r--r-- 1 lukas staff 4073703 23 Apr 13:37 compact_monitor_2_1776940630759.mp4
-rw-r--r-- 1 lukas staff 6432165 23 Apr 13:42 compact_monitor_2_1776940943551.mp4
-rw-r--r-- 1 lukas staff 1484957 23 Apr 13:47 compact_monitor_2_1776941250256.mp4
-rw-r--r-- 1 lukas staff 1336470 23 Apr 13:52 compact_monitor_2_1776941561295.mp4
-rw-r--r-- 1 lukas staff 1327781 23 Apr 13:57 compact_monitor_2_1776941869906.mp4
-rw-r--r-- 1 lukas staff 4219671 24 Apr 09:20 compact_monitor_2_1777011640295.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
ls
Close Tab
⌥⌘1
ls...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu Apr 23 14:01:29 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe/data/data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-23\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $ ll\ntotal 338296\ndrwxr-xr-x 106 lukas staff 3392 24 Apr 09:20 .\ndrwxr-xr-x 17 lukas staff 544 24 Apr 09:19 ..\n-rw-r--r-- 1 lukas staff 174550 23 Apr 11:38 1776933481776_m1.jpg\n-rw-r--r-- 1 lukas staff 1448572 23 Apr 09:24 compact_monitor_1_1776925466477.mp4\n-rw-r--r-- 1 lukas staff 2157204 23 Apr 09:29 compact_monitor_1_1776925771961.mp4\n-rw-r--r-- 1 lukas staff 785851 23 Apr 09:34 compact_monitor_1_1776926078542.mp4\n-rw-r--r-- 1 lukas staff 319924 23 Apr 09:39 compact_monitor_1_1776926389122.mp4\n-rw-r--r-- 1 lukas staff 178437 23 Apr 09:44 compact_monitor_1_1776926696343.mp4\n-rw-r--r-- 1 lukas staff 182316 23 Apr 09:50 compact_monitor_1_1776927001989.mp4\n-rw-r--r-- 1 lukas staff 475405 23 Apr 09:55 compact_monitor_1_1776927311821.mp4\n-rw-r--r-- 1 lukas staff 3670216 23 Apr 10:00 compact_monitor_1_1776927616817.mp4\n-rw-r--r-- 1 lukas staff 1311845 23 Apr 10:05 compact_monitor_1_1776927930717.mp4\n-rw-r--r-- 1 lukas staff 1768745 23 Apr 10:10 compact_monitor_1_1776928242002.mp4\n-rw-r--r-- 1 lukas staff 942473 23 Apr 10:15 compact_monitor_1_1776928549085.mp4\n-rw-r--r-- 1 lukas staff 911130 23 Apr 10:20 compact_monitor_1_1776928854473.mp4\n-rw-r--r-- 1 lukas staff 1249531 23 Apr 10:26 compact_monitor_1_1776929165912.mp4\n-rw-r--r-- 1 lukas staff 2106654 23 Apr 10:31 compact_monitor_1_1776929476115.mp4\n-rw-r--r-- 1 lukas staff 1633583 23 Apr 10:36 compact_monitor_1_1776929781778.mp4\n-rw-r--r-- 1 lukas staff 1186578 23 Apr 10:41 compact_monitor_1_1776930087801.mp4\n-rw-r--r-- 1 lukas staff 322993 23 Apr 10:46 compact_monitor_1_1776930392335.mp4\n-rw-r--r-- 1 lukas staff 120434 23 Apr 10:51 compact_monitor_1_1776930696294.mp4\n-rw-r--r-- 1 lukas staff 111489 23 Apr 10:56 compact_monitor_1_1776931004441.mp4\n-rw-r--r-- 1 lukas staff 560588 23 Apr 11:01 compact_monitor_1_1776931314879.mp4\n-rw-r--r-- 1 lukas staff 2146373 23 Apr 11:07 compact_monitor_1_1776931618003.mp4\n-rw-r--r-- 1 lukas staff 1276021 23 Apr 11:12 compact_monitor_1_1776931930806.mp4\n-rw-r--r-- 1 lukas staff 274120 23 Apr 11:17 compact_monitor_1_1776932235717.mp4\n-rw-r--r-- 1 lukas staff 212162 23 Apr 11:22 compact_monitor_1_1776932541353.mp4\n-rw-r--r-- 1 lukas staff 639071 23 Apr 11:27 compact_monitor_1_1776932847264.mp4\n-rw-r--r-- 1 lukas staff 315645 23 Apr 11:32 compact_monitor_1_1776933174068.mp4\n-rw-r--r-- 1 lukas staff 518635 23 Apr 11:38 compact_monitor_1_1776933492233.mp4\n-rw-r--r-- 1 lukas staff 1886880 23 Apr 11:43 compact_monitor_1_1776933806263.mp4\n-rw-r--r-- 1 lukas staff 2316900 23 Apr 11:48 compact_monitor_1_1776934133065.mp4\n-rw-r--r-- 1 lukas staff 1589469 23 Apr 11:54 compact_monitor_1_1776934449640.mp4\n-rw-r--r-- 1 lukas staff 592352 23 Apr 11:59 compact_monitor_1_1776934755385.mp4\n-rw-r--r-- 1 lukas staff 1631938 23 Apr 12:04 compact_monitor_1_1776935058652.mp4\n-rw-r--r-- 1 lukas staff 6099603 23 Apr 12:24 compact_monitor_1_1776936289062.mp4\n-rw-r--r-- 1 lukas staff 91125 23 Apr 12:35 compact_monitor_1_1776936919782.mp4\n-rw-r--r-- 1 lukas staff 2955581 23 Apr 12:40 compact_monitor_1_1776937224602.mp4\n-rw-r--r-- 1 lukas staff 3002373 23 Apr 12:45 compact_monitor_1_1776937538337.mp4\n-rw-r--r-- 1 lukas staff 3116117 23 Apr 12:50 compact_monitor_1_1776937842939.mp4\n-rw-r--r-- 1 lukas staff 2426878 23 Apr 12:55 compact_monitor_1_1776938150380.mp4\n-rw-r--r-- 1 lukas staff 2028056 23 Apr 13:01 compact_monitor_1_1776938459676.mp4\n-rw-r--r-- 1 lukas staff 2104678 23 Apr 13:06 compact_monitor_1_1776938769006.mp4\n-rw-r--r-- 1 lukas staff 3004512 23 Apr 13:11 compact_monitor_1_1776939078771.mp4\n-rw-r--r-- 1 lukas staff 1643140 23 Apr 13:16 compact_monitor_1_1776939389326.mp4\n-rw-r--r-- 1 lukas staff 1923058 23 Apr 13:21 compact_monitor_1_1776939706398.mp4\n-rw-r--r-- 1 lukas staff 900757 23 Apr 13:26 compact_monitor_1_1776940011813.mp4\n-rw-r--r-- 1 lukas staff 2964075 23 Apr 13:32 compact_monitor_1_1776940319106.mp4\n-rw-r--r-- 1 lukas staff 2419466 23 Apr 13:37 compact_monitor_1_1776940628353.mp4\n-rw-r--r-- 1 lukas staff 2447997 23 Apr 13:42 compact_monitor_1_1776940941730.mp4\n-rw-r--r-- 1 lukas staff 2202220 23 Apr 13:47 compact_monitor_1_1776941248366.mp4\n-rw-r--r-- 1 lukas staff 2309716 23 Apr 13:52 compact_monitor_1_1776941558220.mp4\n-rw-r--r-- 1 lukas staff 2049791 23 Apr 13:57 compact_monitor_1_1776941868192.mp4\n-rw-r--r-- 1 lukas staff 6097615 24 Apr 09:20 compact_monitor_1_1777011631828.mp4\n-rw-r--r-- 1 lukas staff 215938 23 Apr 09:24 compact_monitor_2_1776925467316.mp4\n-rw-r--r-- 1 lukas staff 3956084 23 Apr 09:29 compact_monitor_2_1776925774333.mp4\n-rw-r--r-- 1 lukas staff 3998164 23 Apr 09:34 compact_monitor_2_1776926081685.mp4\n-rw-r--r-- 1 lukas staff 2446471 23 Apr 09:39 compact_monitor_2_1776926391115.mp4\n-rw-r--r-- 1 lukas staff 776043 23 Apr 09:44 compact_monitor_2_1776926697217.mp4\n-rw-r--r-- 1 lukas staff 802594 23 Apr 09:50 compact_monitor_2_1776927003100.mp4\n-rw-r--r-- 1 lukas staff 1453164 23 Apr 09:55 compact_monitor_2_1776927313533.mp4\n-rw-r--r-- 1 lukas staff 1449750 23 Apr 10:00 compact_monitor_2_1776927621638.mp4\n-rw-r--r-- 1 lukas staff 1635019 23 Apr 10:05 compact_monitor_2_1776927933130.mp4\n-rw-r--r-- 1 lukas staff 595843 23 Apr 10:10 compact_monitor_2_1776928245303.mp4\n-rw-r--r-- 1 lukas staff 531088 23 Apr 10:15 compact_monitor_2_1776928550520.mp4\n-rw-r--r-- 1 lukas staff 846515 23 Apr 10:20 compact_monitor_2_1776928856922.mp4\n-rw-r--r-- 1 lukas staff 904088 23 Apr 10:26 compact_monitor_2_1776929169922.mp4\n-rw-r--r-- 1 lukas staff 786829 23 Apr 10:31 compact_monitor_2_1776929479675.mp4\n-rw-r--r-- 1 lukas staff 729181 23 Apr 10:36 compact_monitor_2_1776929783409.mp4\n-rw-r--r-- 1 lukas staff 1116843 23 Apr 10:41 compact_monitor_2_1776930090240.mp4\n-rw-r--r-- 1 lukas staff 889822 23 Apr 10:46 compact_monitor_2_1776930393454.mp4\n-rw-r--r-- 1 lukas staff 444250 23 Apr 10:51 compact_monitor_2_1776930697139.mp4\n-rw-r--r-- 1 lukas staff 1024242 23 Apr 10:56 compact_monitor_2_1776931006436.mp4\n-rw-r--r-- 1 lukas staff 1206096 23 Apr 11:01 compact_monitor_2_1776931316182.mp4\n-rw-r--r-- 1 lukas staff 1249893 23 Apr 11:07 compact_monitor_2_1776931621999.mp4\n-rw-r--r-- 1 lukas staff 401526 23 Apr 11:12 compact_monitor_2_1776931932870.mp4\n-rw-r--r-- 1 lukas staff 982256 23 Apr 11:17 compact_monitor_2_1776932236802.mp4\n-rw-r--r-- 1 lukas staff 1131582 23 Apr 11:22 compact_monitor_2_1776932542205.mp4\n-rw-r--r-- 1 lukas staff 808822 23 Apr 11:27 compact_monitor_2_1776932849317.mp4\n-rw-r--r-- 1 lukas staff 442538 23 Apr 11:32 compact_monitor_2_1776933176662.mp4\n-rw-r--r-- 1 lukas staff 675274 23 Apr 11:38 compact_monitor_2_1776933495384.mp4\n-rw-r--r-- 1 lukas staff 1534516 23 Apr 11:43 compact_monitor_2_1776933812317.mp4\n-rw-r--r-- 1 lukas staff 1657590 23 Apr 11:49 compact_monitor_2_1776934138529.mp4\n-rw-r--r-- 1 lukas staff 1222887 23 Apr 11:54 compact_monitor_2_1776934453154.mp4\n-rw-r--r-- 1 lukas staff 1003999 23 Apr 11:59 compact_monitor_2_1776934756922.mp4\n-rw-r--r-- 1 lukas staff 1168918 23 Apr 12:04 compact_monitor_2_1776935062292.mp4\n-rw-r--r-- 1 lukas staff 5755378 23 Apr 12:25 compact_monitor_2_1776936297908.mp4\n-rw-r--r-- 1 lukas staff 302577 23 Apr 12:25 compact_monitor_2_1776936305094.mp4\n-rw-r--r-- 1 lukas staff 1710485 23 Apr 12:35 compact_monitor_2_1776936920837.mp4\n-rw-r--r-- 1 lukas staff 2705135 23 Apr 12:40 compact_monitor_2_1776937228721.mp4\n-rw-r--r-- 1 lukas staff 1751314 23 Apr 12:45 compact_monitor_2_1776937539934.mp4\n-rw-r--r-- 1 lukas staff 924709 23 Apr 12:50 compact_monitor_2_1776937844858.mp4\n-rw-r--r-- 1 lukas staff 1285623 23 Apr 12:55 compact_monitor_2_1776938151831.mp4\n-rw-r--r-- 1 lukas staff 405857 23 Apr 13:01 compact_monitor_2_1776938461195.mp4\n-rw-r--r-- 1 lukas staff 407926 23 Apr 13:06 compact_monitor_2_1776938770290.mp4\n-rw-r--r-- 1 lukas staff 958635 23 Apr 13:11 compact_monitor_2_1776939080379.mp4\n-rw-r--r-- 1 lukas staff 3622447 23 Apr 13:16 compact_monitor_2_1776939392822.mp4\n-rw-r--r-- 1 lukas staff 1850262 23 Apr 13:21 compact_monitor_2_1776939708714.mp4\n-rw-r--r-- 1 lukas staff 4725657 23 Apr 13:26 compact_monitor_2_1776940013773.mp4\n-rw-r--r-- 1 lukas staff 3590913 23 Apr 13:32 compact_monitor_2_1776940321454.mp4\n-rw-r--r-- 1 lukas staff 4073703 23 Apr 13:37 compact_monitor_2_1776940630759.mp4\n-rw-r--r-- 1 lukas staff 6432165 23 Apr 13:42 compact_monitor_2_1776940943551.mp4\n-rw-r--r-- 1 lukas staff 1484957 23 Apr 13:47 compact_monitor_2_1776941250256.mp4\n-rw-r--r-- 1 lukas staff 1336470 23 Apr 13:52 compact_monitor_2_1776941561295.mp4\n-rw-r--r-- 1 lukas staff 1327781 23 Apr 13:57 compact_monitor_2_1776941869906.mp4\n-rw-r--r-- 1 lukas staff 4219671 24 Apr 09:20 compact_monitor_2_1777011640295.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $","depth":4,"value":"Last login: Thu Apr 23 14:01:29 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe/data/data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-23\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $ ll\ntotal 338296\ndrwxr-xr-x 106 lukas staff 3392 24 Apr 09:20 .\ndrwxr-xr-x 17 lukas staff 544 24 Apr 09:19 ..\n-rw-r--r-- 1 lukas staff 174550 23 Apr 11:38 1776933481776_m1.jpg\n-rw-r--r-- 1 lukas staff 1448572 23 Apr 09:24 compact_monitor_1_1776925466477.mp4\n-rw-r--r-- 1 lukas staff 2157204 23 Apr 09:29 compact_monitor_1_1776925771961.mp4\n-rw-r--r-- 1 lukas staff 785851 23 Apr 09:34 compact_monitor_1_1776926078542.mp4\n-rw-r--r-- 1 lukas staff 319924 23 Apr 09:39 compact_monitor_1_1776926389122.mp4\n-rw-r--r-- 1 lukas staff 178437 23 Apr 09:44 compact_monitor_1_1776926696343.mp4\n-rw-r--r-- 1 lukas staff 182316 23 Apr 09:50 compact_monitor_1_1776927001989.mp4\n-rw-r--r-- 1 lukas staff 475405 23 Apr 09:55 compact_monitor_1_1776927311821.mp4\n-rw-r--r-- 1 lukas staff 3670216 23 Apr 10:00 compact_monitor_1_1776927616817.mp4\n-rw-r--r-- 1 lukas staff 1311845 23 Apr 10:05 compact_monitor_1_1776927930717.mp4\n-rw-r--r-- 1 lukas staff 1768745 23 Apr 10:10 compact_monitor_1_1776928242002.mp4\n-rw-r--r-- 1 lukas staff 942473 23 Apr 10:15 compact_monitor_1_1776928549085.mp4\n-rw-r--r-- 1 lukas staff 911130 23 Apr 10:20 compact_monitor_1_1776928854473.mp4\n-rw-r--r-- 1 lukas staff 1249531 23 Apr 10:26 compact_monitor_1_1776929165912.mp4\n-rw-r--r-- 1 lukas staff 2106654 23 Apr 10:31 compact_monitor_1_1776929476115.mp4\n-rw-r--r-- 1 lukas staff 1633583 23 Apr 10:36 compact_monitor_1_1776929781778.mp4\n-rw-r--r-- 1 lukas staff 1186578 23 Apr 10:41 compact_monitor_1_1776930087801.mp4\n-rw-r--r-- 1 lukas staff 322993 23 Apr 10:46 compact_monitor_1_1776930392335.mp4\n-rw-r--r-- 1 lukas staff 120434 23 Apr 10:51 compact_monitor_1_1776930696294.mp4\n-rw-r--r-- 1 lukas staff 111489 23 Apr 10:56 compact_monitor_1_1776931004441.mp4\n-rw-r--r-- 1 lukas staff 560588 23 Apr 11:01 compact_monitor_1_1776931314879.mp4\n-rw-r--r-- 1 lukas staff 2146373 23 Apr 11:07 compact_monitor_1_1776931618003.mp4\n-rw-r--r-- 1 lukas staff 1276021 23 Apr 11:12 compact_monitor_1_1776931930806.mp4\n-rw-r--r-- 1 lukas staff 274120 23 Apr 11:17 compact_monitor_1_1776932235717.mp4\n-rw-r--r-- 1 lukas staff 212162 23 Apr 11:22 compact_monitor_1_1776932541353.mp4\n-rw-r--r-- 1 lukas staff 639071 23 Apr 11:27 compact_monitor_1_1776932847264.mp4\n-rw-r--r-- 1 lukas staff 315645 23 Apr 11:32 compact_monitor_1_1776933174068.mp4\n-rw-r--r-- 1 lukas staff 518635 23 Apr 11:38 compact_monitor_1_1776933492233.mp4\n-rw-r--r-- 1 lukas staff 1886880 23 Apr 11:43 compact_monitor_1_1776933806263.mp4\n-rw-r--r-- 1 lukas staff 2316900 23 Apr 11:48 compact_monitor_1_1776934133065.mp4\n-rw-r--r-- 1 lukas staff 1589469 23 Apr 11:54 compact_monitor_1_1776934449640.mp4\n-rw-r--r-- 1 lukas staff 592352 23 Apr 11:59 compact_monitor_1_1776934755385.mp4\n-rw-r--r-- 1 lukas staff 1631938 23 Apr 12:04 compact_monitor_1_1776935058652.mp4\n-rw-r--r-- 1 lukas staff 6099603 23 Apr 12:24 compact_monitor_1_1776936289062.mp4\n-rw-r--r-- 1 lukas staff 91125 23 Apr 12:35 compact_monitor_1_1776936919782.mp4\n-rw-r--r-- 1 lukas staff 2955581 23 Apr 12:40 compact_monitor_1_1776937224602.mp4\n-rw-r--r-- 1 lukas staff 3002373 23 Apr 12:45 compact_monitor_1_1776937538337.mp4\n-rw-r--r-- 1 lukas staff 3116117 23 Apr 12:50 compact_monitor_1_1776937842939.mp4\n-rw-r--r-- 1 lukas staff 2426878 23 Apr 12:55 compact_monitor_1_1776938150380.mp4\n-rw-r--r-- 1 lukas staff 2028056 23 Apr 13:01 compact_monitor_1_1776938459676.mp4\n-rw-r--r-- 1 lukas staff 2104678 23 Apr 13:06 compact_monitor_1_1776938769006.mp4\n-rw-r--r-- 1 lukas staff 3004512 23 Apr 13:11 compact_monitor_1_1776939078771.mp4\n-rw-r--r-- 1 lukas staff 1643140 23 Apr 13:16 compact_monitor_1_1776939389326.mp4\n-rw-r--r-- 1 lukas staff 1923058 23 Apr 13:21 compact_monitor_1_1776939706398.mp4\n-rw-r--r-- 1 lukas staff 900757 23 Apr 13:26 compact_monitor_1_1776940011813.mp4\n-rw-r--r-- 1 lukas staff 2964075 23 Apr 13:32 compact_monitor_1_1776940319106.mp4\n-rw-r--r-- 1 lukas staff 2419466 23 Apr 13:37 compact_monitor_1_1776940628353.mp4\n-rw-r--r-- 1 lukas staff 2447997 23 Apr 13:42 compact_monitor_1_1776940941730.mp4\n-rw-r--r-- 1 lukas staff 2202220 23 Apr 13:47 compact_monitor_1_1776941248366.mp4\n-rw-r--r-- 1 lukas staff 2309716 23 Apr 13:52 compact_monitor_1_1776941558220.mp4\n-rw-r--r-- 1 lukas staff 2049791 23 Apr 13:57 compact_monitor_1_1776941868192.mp4\n-rw-r--r-- 1 lukas staff 6097615 24 Apr 09:20 compact_monitor_1_1777011631828.mp4\n-rw-r--r-- 1 lukas staff 215938 23 Apr 09:24 compact_monitor_2_1776925467316.mp4\n-rw-r--r-- 1 lukas staff 3956084 23 Apr 09:29 compact_monitor_2_1776925774333.mp4\n-rw-r--r-- 1 lukas staff 3998164 23 Apr 09:34 compact_monitor_2_1776926081685.mp4\n-rw-r--r-- 1 lukas staff 2446471 23 Apr 09:39 compact_monitor_2_1776926391115.mp4\n-rw-r--r-- 1 lukas staff 776043 23 Apr 09:44 compact_monitor_2_1776926697217.mp4\n-rw-r--r-- 1 lukas staff 802594 23 Apr 09:50 compact_monitor_2_1776927003100.mp4\n-rw-r--r-- 1 lukas staff 1453164 23 Apr 09:55 compact_monitor_2_1776927313533.mp4\n-rw-r--r-- 1 lukas staff 1449750 23 Apr 10:00 compact_monitor_2_1776927621638.mp4\n-rw-r--r-- 1 lukas staff 1635019 23 Apr 10:05 compact_monitor_2_1776927933130.mp4\n-rw-r--r-- 1 lukas staff 595843 23 Apr 10:10 compact_monitor_2_1776928245303.mp4\n-rw-r--r-- 1 lukas staff 531088 23 Apr 10:15 compact_monitor_2_1776928550520.mp4\n-rw-r--r-- 1 lukas staff 846515 23 Apr 10:20 compact_monitor_2_1776928856922.mp4\n-rw-r--r-- 1 lukas staff 904088 23 Apr 10:26 compact_monitor_2_1776929169922.mp4\n-rw-r--r-- 1 lukas staff 786829 23 Apr 10:31 compact_monitor_2_1776929479675.mp4\n-rw-r--r-- 1 lukas staff 729181 23 Apr 10:36 compact_monitor_2_1776929783409.mp4\n-rw-r--r-- 1 lukas staff 1116843 23 Apr 10:41 compact_monitor_2_1776930090240.mp4\n-rw-r--r-- 1 lukas staff 889822 23 Apr 10:46 compact_monitor_2_1776930393454.mp4\n-rw-r--r-- 1 lukas staff 444250 23 Apr 10:51 compact_monitor_2_1776930697139.mp4\n-rw-r--r-- 1 lukas staff 1024242 23 Apr 10:56 compact_monitor_2_1776931006436.mp4\n-rw-r--r-- 1 lukas staff 1206096 23 Apr 11:01 compact_monitor_2_1776931316182.mp4\n-rw-r--r-- 1 lukas staff 1249893 23 Apr 11:07 compact_monitor_2_1776931621999.mp4\n-rw-r--r-- 1 lukas staff 401526 23 Apr 11:12 compact_monitor_2_1776931932870.mp4\n-rw-r--r-- 1 lukas staff 982256 23 Apr 11:17 compact_monitor_2_1776932236802.mp4\n-rw-r--r-- 1 lukas staff 1131582 23 Apr 11:22 compact_monitor_2_1776932542205.mp4\n-rw-r--r-- 1 lukas staff 808822 23 Apr 11:27 compact_monitor_2_1776932849317.mp4\n-rw-r--r-- 1 lukas staff 442538 23 Apr 11:32 compact_monitor_2_1776933176662.mp4\n-rw-r--r-- 1 lukas staff 675274 23 Apr 11:38 compact_monitor_2_1776933495384.mp4\n-rw-r--r-- 1 lukas staff 1534516 23 Apr 11:43 compact_monitor_2_1776933812317.mp4\n-rw-r--r-- 1 lukas staff 1657590 23 Apr 11:49 compact_monitor_2_1776934138529.mp4\n-rw-r--r-- 1 lukas staff 1222887 23 Apr 11:54 compact_monitor_2_1776934453154.mp4\n-rw-r--r-- 1 lukas staff 1003999 23 Apr 11:59 compact_monitor_2_1776934756922.mp4\n-rw-r--r-- 1 lukas staff 1168918 23 Apr 12:04 compact_monitor_2_1776935062292.mp4\n-rw-r--r-- 1 lukas staff 5755378 23 Apr 12:25 compact_monitor_2_1776936297908.mp4\n-rw-r--r-- 1 lukas staff 302577 23 Apr 12:25 compact_monitor_2_1776936305094.mp4\n-rw-r--r-- 1 lukas staff 1710485 23 Apr 12:35 compact_monitor_2_1776936920837.mp4\n-rw-r--r-- 1 lukas staff 2705135 23 Apr 12:40 compact_monitor_2_1776937228721.mp4\n-rw-r--r-- 1 lukas staff 1751314 23 Apr 12:45 compact_monitor_2_1776937539934.mp4\n-rw-r--r-- 1 lukas staff 924709 23 Apr 12:50 compact_monitor_2_1776937844858.mp4\n-rw-r--r-- 1 lukas staff 1285623 23 Apr 12:55 compact_monitor_2_1776938151831.mp4\n-rw-r--r-- 1 lukas staff 405857 23 Apr 13:01 compact_monitor_2_1776938461195.mp4\n-rw-r--r-- 1 lukas staff 407926 23 Apr 13:06 compact_monitor_2_1776938770290.mp4\n-rw-r--r-- 1 lukas staff 958635 23 Apr 13:11 compact_monitor_2_1776939080379.mp4\n-rw-r--r-- 1 lukas staff 3622447 23 Apr 13:16 compact_monitor_2_1776939392822.mp4\n-rw-r--r-- 1 lukas staff 1850262 23 Apr 13:21 compact_monitor_2_1776939708714.mp4\n-rw-r--r-- 1 lukas staff 4725657 23 Apr 13:26 compact_monitor_2_1776940013773.mp4\n-rw-r--r-- 1 lukas staff 3590913 23 Apr 13:32 compact_monitor_2_1776940321454.mp4\n-rw-r--r-- 1 lukas staff 4073703 23 Apr 13:37 compact_monitor_2_1776940630759.mp4\n-rw-r--r-- 1 lukas staff 6432165 23 Apr 13:42 compact_monitor_2_1776940943551.mp4\n-rw-r--r-- 1 lukas staff 1484957 23 Apr 13:47 compact_monitor_2_1776941250256.mp4\n-rw-r--r-- 1 lukas staff 1336470 23 Apr 13:52 compact_monitor_2_1776941561295.mp4\n-rw-r--r-- 1 lukas staff 1327781 23 Apr 13:57 compact_monitor_2_1776941869906.mp4\n-rw-r--r-- 1 lukas staff 4219671 24 Apr 09:20 compact_monitor_2_1777011640295.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19722222,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.2013889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39444444,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3986111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.59166664,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59583336,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ls","depth":2,"bounds":{"left":0.7888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.79305553,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ls","depth":1,"bounds":{"left":0.49583334,"top":0.033333335,"width":0.011111111,"height":0.017777778},"role_description":"text"}]...
|
-7235361245482201449
|
-9203494918512755567
|
visual_change
|
accessibility
|
NULL
|
Last login: Thu Apr 23 14:01:29 on ttys009
Poetry Last login: Thu Apr 23 14:01:29 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe/data/data
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-23
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $ ll
total 338296
drwxr-xr-x 106 lukas staff 3392 24 Apr 09:20 .
drwxr-xr-x 17 lukas staff 544 24 Apr 09:19 ..
-rw-r--r-- 1 lukas staff 174550 23 Apr 11:38 1776933481776_m1.jpg
-rw-r--r-- 1 lukas staff 1448572 23 Apr 09:24 compact_monitor_1_1776925466477.mp4
-rw-r--r-- 1 lukas staff 2157204 23 Apr 09:29 compact_monitor_1_1776925771961.mp4
-rw-r--r-- 1 lukas staff 785851 23 Apr 09:34 compact_monitor_1_1776926078542.mp4
-rw-r--r-- 1 lukas staff 319924 23 Apr 09:39 compact_monitor_1_1776926389122.mp4
-rw-r--r-- 1 lukas staff 178437 23 Apr 09:44 compact_monitor_1_1776926696343.mp4
-rw-r--r-- 1 lukas staff 182316 23 Apr 09:50 compact_monitor_1_1776927001989.mp4
-rw-r--r-- 1 lukas staff 475405 23 Apr 09:55 compact_monitor_1_1776927311821.mp4
-rw-r--r-- 1 lukas staff 3670216 23 Apr 10:00 compact_monitor_1_1776927616817.mp4
-rw-r--r-- 1 lukas staff 1311845 23 Apr 10:05 compact_monitor_1_1776927930717.mp4
-rw-r--r-- 1 lukas staff 1768745 23 Apr 10:10 compact_monitor_1_1776928242002.mp4
-rw-r--r-- 1 lukas staff 942473 23 Apr 10:15 compact_monitor_1_1776928549085.mp4
-rw-r--r-- 1 lukas staff 911130 23 Apr 10:20 compact_monitor_1_1776928854473.mp4
-rw-r--r-- 1 lukas staff 1249531 23 Apr 10:26 compact_monitor_1_1776929165912.mp4
-rw-r--r-- 1 lukas staff 2106654 23 Apr 10:31 compact_monitor_1_1776929476115.mp4
-rw-r--r-- 1 lukas staff 1633583 23 Apr 10:36 compact_monitor_1_1776929781778.mp4
-rw-r--r-- 1 lukas staff 1186578 23 Apr 10:41 compact_monitor_1_1776930087801.mp4
-rw-r--r-- 1 lukas staff 322993 23 Apr 10:46 compact_monitor_1_1776930392335.mp4
-rw-r--r-- 1 lukas staff 120434 23 Apr 10:51 compact_monitor_1_1776930696294.mp4
-rw-r--r-- 1 lukas staff 111489 23 Apr 10:56 compact_monitor_1_1776931004441.mp4
-rw-r--r-- 1 lukas staff 560588 23 Apr 11:01 compact_monitor_1_1776931314879.mp4
-rw-r--r-- 1 lukas staff 2146373 23 Apr 11:07 compact_monitor_1_1776931618003.mp4
-rw-r--r-- 1 lukas staff 1276021 23 Apr 11:12 compact_monitor_1_1776931930806.mp4
-rw-r--r-- 1 lukas staff 274120 23 Apr 11:17 compact_monitor_1_1776932235717.mp4
-rw-r--r-- 1 lukas staff 212162 23 Apr 11:22 compact_monitor_1_1776932541353.mp4
-rw-r--r-- 1 lukas staff 639071 23 Apr 11:27 compact_monitor_1_1776932847264.mp4
-rw-r--r-- 1 lukas staff 315645 23 Apr 11:32 compact_monitor_1_1776933174068.mp4
-rw-r--r-- 1 lukas staff 518635 23 Apr 11:38 compact_monitor_1_1776933492233.mp4
-rw-r--r-- 1 lukas staff 1886880 23 Apr 11:43 compact_monitor_1_1776933806263.mp4
-rw-r--r-- 1 lukas staff 2316900 23 Apr 11:48 compact_monitor_1_1776934133065.mp4
-rw-r--r-- 1 lukas staff 1589469 23 Apr 11:54 compact_monitor_1_1776934449640.mp4
-rw-r--r-- 1 lukas staff 592352 23 Apr 11:59 compact_monitor_1_1776934755385.mp4
-rw-r--r-- 1 lukas staff 1631938 23 Apr 12:04 compact_monitor_1_1776935058652.mp4
-rw-r--r-- 1 lukas staff 6099603 23 Apr 12:24 compact_monitor_1_1776936289062.mp4
-rw-r--r-- 1 lukas staff 91125 23 Apr 12:35 compact_monitor_1_1776936919782.mp4
-rw-r--r-- 1 lukas staff 2955581 23 Apr 12:40 compact_monitor_1_1776937224602.mp4
-rw-r--r-- 1 lukas staff 3002373 23 Apr 12:45 compact_monitor_1_1776937538337.mp4
-rw-r--r-- 1 lukas staff 3116117 23 Apr 12:50 compact_monitor_1_1776937842939.mp4
-rw-r--r-- 1 lukas staff 2426878 23 Apr 12:55 compact_monitor_1_1776938150380.mp4
-rw-r--r-- 1 lukas staff 2028056 23 Apr 13:01 compact_monitor_1_1776938459676.mp4
-rw-r--r-- 1 lukas staff 2104678 23 Apr 13:06 compact_monitor_1_1776938769006.mp4
-rw-r--r-- 1 lukas staff 3004512 23 Apr 13:11 compact_monitor_1_1776939078771.mp4
-rw-r--r-- 1 lukas staff 1643140 23 Apr 13:16 compact_monitor_1_1776939389326.mp4
-rw-r--r-- 1 lukas staff 1923058 23 Apr 13:21 compact_monitor_1_1776939706398.mp4
-rw-r--r-- 1 lukas staff 900757 23 Apr 13:26 compact_monitor_1_1776940011813.mp4
-rw-r--r-- 1 lukas staff 2964075 23 Apr 13:32 compact_monitor_1_1776940319106.mp4
-rw-r--r-- 1 lukas staff 2419466 23 Apr 13:37 compact_monitor_1_1776940628353.mp4
-rw-r--r-- 1 lukas staff 2447997 23 Apr 13:42 compact_monitor_1_1776940941730.mp4
-rw-r--r-- 1 lukas staff 2202220 23 Apr 13:47 compact_monitor_1_1776941248366.mp4
-rw-r--r-- 1 lukas staff 2309716 23 Apr 13:52 compact_monitor_1_1776941558220.mp4
-rw-r--r-- 1 lukas staff 2049791 23 Apr 13:57 compact_monitor_1_1776941868192.mp4
-rw-r--r-- 1 lukas staff 6097615 24 Apr 09:20 compact_monitor_1_1777011631828.mp4
-rw-r--r-- 1 lukas staff 215938 23 Apr 09:24 compact_monitor_2_1776925467316.mp4
-rw-r--r-- 1 lukas staff 3956084 23 Apr 09:29 compact_monitor_2_1776925774333.mp4
-rw-r--r-- 1 lukas staff 3998164 23 Apr 09:34 compact_monitor_2_1776926081685.mp4
-rw-r--r-- 1 lukas staff 2446471 23 Apr 09:39 compact_monitor_2_1776926391115.mp4
-rw-r--r-- 1 lukas staff 776043 23 Apr 09:44 compact_monitor_2_1776926697217.mp4
-rw-r--r-- 1 lukas staff 802594 23 Apr 09:50 compact_monitor_2_1776927003100.mp4
-rw-r--r-- 1 lukas staff 1453164 23 Apr 09:55 compact_monitor_2_1776927313533.mp4
-rw-r--r-- 1 lukas staff 1449750 23 Apr 10:00 compact_monitor_2_1776927621638.mp4
-rw-r--r-- 1 lukas staff 1635019 23 Apr 10:05 compact_monitor_2_1776927933130.mp4
-rw-r--r-- 1 lukas staff 595843 23 Apr 10:10 compact_monitor_2_1776928245303.mp4
-rw-r--r-- 1 lukas staff 531088 23 Apr 10:15 compact_monitor_2_1776928550520.mp4
-rw-r--r-- 1 lukas staff 846515 23 Apr 10:20 compact_monitor_2_1776928856922.mp4
-rw-r--r-- 1 lukas staff 904088 23 Apr 10:26 compact_monitor_2_1776929169922.mp4
-rw-r--r-- 1 lukas staff 786829 23 Apr 10:31 compact_monitor_2_1776929479675.mp4
-rw-r--r-- 1 lukas staff 729181 23 Apr 10:36 compact_monitor_2_1776929783409.mp4
-rw-r--r-- 1 lukas staff 1116843 23 Apr 10:41 compact_monitor_2_1776930090240.mp4
-rw-r--r-- 1 lukas staff 889822 23 Apr 10:46 compact_monitor_2_1776930393454.mp4
-rw-r--r-- 1 lukas staff 444250 23 Apr 10:51 compact_monitor_2_1776930697139.mp4
-rw-r--r-- 1 lukas staff 1024242 23 Apr 10:56 compact_monitor_2_1776931006436.mp4
-rw-r--r-- 1 lukas staff 1206096 23 Apr 11:01 compact_monitor_2_1776931316182.mp4
-rw-r--r-- 1 lukas staff 1249893 23 Apr 11:07 compact_monitor_2_1776931621999.mp4
-rw-r--r-- 1 lukas staff 401526 23 Apr 11:12 compact_monitor_2_1776931932870.mp4
-rw-r--r-- 1 lukas staff 982256 23 Apr 11:17 compact_monitor_2_1776932236802.mp4
-rw-r--r-- 1 lukas staff 1131582 23 Apr 11:22 compact_monitor_2_1776932542205.mp4
-rw-r--r-- 1 lukas staff 808822 23 Apr 11:27 compact_monitor_2_1776932849317.mp4
-rw-r--r-- 1 lukas staff 442538 23 Apr 11:32 compact_monitor_2_1776933176662.mp4
-rw-r--r-- 1 lukas staff 675274 23 Apr 11:38 compact_monitor_2_1776933495384.mp4
-rw-r--r-- 1 lukas staff 1534516 23 Apr 11:43 compact_monitor_2_1776933812317.mp4
-rw-r--r-- 1 lukas staff 1657590 23 Apr 11:49 compact_monitor_2_1776934138529.mp4
-rw-r--r-- 1 lukas staff 1222887 23 Apr 11:54 compact_monitor_2_1776934453154.mp4
-rw-r--r-- 1 lukas staff 1003999 23 Apr 11:59 compact_monitor_2_1776934756922.mp4
-rw-r--r-- 1 lukas staff 1168918 23 Apr 12:04 compact_monitor_2_1776935062292.mp4
-rw-r--r-- 1 lukas staff 5755378 23 Apr 12:25 compact_monitor_2_1776936297908.mp4
-rw-r--r-- 1 lukas staff 302577 23 Apr 12:25 compact_monitor_2_1776936305094.mp4
-rw-r--r-- 1 lukas staff 1710485 23 Apr 12:35 compact_monitor_2_1776936920837.mp4
-rw-r--r-- 1 lukas staff 2705135 23 Apr 12:40 compact_monitor_2_1776937228721.mp4
-rw-r--r-- 1 lukas staff 1751314 23 Apr 12:45 compact_monitor_2_1776937539934.mp4
-rw-r--r-- 1 lukas staff 924709 23 Apr 12:50 compact_monitor_2_1776937844858.mp4
-rw-r--r-- 1 lukas staff 1285623 23 Apr 12:55 compact_monitor_2_1776938151831.mp4
-rw-r--r-- 1 lukas staff 405857 23 Apr 13:01 compact_monitor_2_1776938461195.mp4
-rw-r--r-- 1 lukas staff 407926 23 Apr 13:06 compact_monitor_2_1776938770290.mp4
-rw-r--r-- 1 lukas staff 958635 23 Apr 13:11 compact_monitor_2_1776939080379.mp4
-rw-r--r-- 1 lukas staff 3622447 23 Apr 13:16 compact_monitor_2_1776939392822.mp4
-rw-r--r-- 1 lukas staff 1850262 23 Apr 13:21 compact_monitor_2_1776939708714.mp4
-rw-r--r-- 1 lukas staff 4725657 23 Apr 13:26 compact_monitor_2_1776940013773.mp4
-rw-r--r-- 1 lukas staff 3590913 23 Apr 13:32 compact_monitor_2_1776940321454.mp4
-rw-r--r-- 1 lukas staff 4073703 23 Apr 13:37 compact_monitor_2_1776940630759.mp4
-rw-r--r-- 1 lukas staff 6432165 23 Apr 13:42 compact_monitor_2_1776940943551.mp4
-rw-r--r-- 1 lukas staff 1484957 23 Apr 13:47 compact_monitor_2_1776941250256.mp4
-rw-r--r-- 1 lukas staff 1336470 23 Apr 13:52 compact_monitor_2_1776941561295.mp4
-rw-r--r-- 1 lukas staff 1327781 23 Apr 13:57 compact_monitor_2_1776941869906.mp4
-rw-r--r-- 1 lukas staff 4219671 24 Apr 09:20 compact_monitor_2_1777011640295.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-23 $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
ls
Close Tab
⌥⌘1
ls...
|
NULL
|
|
31349
|
631
|
2
|
2026-04-15T15:38:56.539684+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776267536539_m1.jpg...
|
iTerm2
|
ls
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 208823 15 Apr 18:2 -rw-r--r-- 1 lukas staff 208823 15 Apr 18:24 1776266649991_m1.jpg
-rw-r--r-- 1 lukas staff 677743 15 Apr 18:24 1776266649991_m2.jpg
-rw-r--r-- 1 lukas staff 285273 15 Apr 18:24 1776266655380_m2.jpg
-rw-r--r-- 1 lukas staff 208338 15 Apr 18:24 1776266656348_m1.jpg
-rw-r--r-- 1 lukas staff 299758 15 Apr 18:24 1776266657887_m2.jpg
-rw-r--r-- 1 lukas staff 208905 15 Apr 18:24 1776266660014_m1.jpg
-rw-r--r-- 1 lukas staff 505543 15 Apr 18:24 1776266660357_m2.jpg
-rw-r--r-- 1 lukas staff 130773 15 Apr 18:24 1776266662583_m2.jpg
-rw-r--r-- 1 lukas staff 208837 15 Apr 18:24 1776266662590_m1.jpg
-rw-r--r-- 1 lukas staff 131262 15 Apr 18:24 1776266665030_m2.jpg
-rw-r--r-- 1 lukas staff 208543 15 Apr 18:24 1776266665178_m1.jpg
-rw-r--r-- 1 lukas staff 82600 15 Apr 18:24 1776266668094_m2.jpg
-rw-r--r-- 1 lukas staff 99799 15 Apr 18:24 1776266671070_m2.jpg
-rw-r--r-- 1 lukas staff 209265 15 Apr 18:24 1776266671742_m1.jpg
-rw-r--r-- 1 lukas staff 69569 15 Apr 18:24 1776266672855_m2.jpg
-rw-r--r-- 1 lukas staff 233878 15 Apr 18:24 1776266675463_m2.jpg
-rw-r--r-- 1 lukas staff 233944 15 Apr 18:24 1776266676686_m2.jpg
-rw-r--r-- 1 lukas staff 208529 15 Apr 18:24 1776266676718_m1.jpg
-rw-r--r-- 1 lukas staff 208411 15 Apr 18:24 1776266678430_m1.jpg
-rw-r--r-- 1 lukas staff 275989 15 Apr 18:24 1776266678431_m2.jpg
-rw-r--r-- 1 lukas staff 258903 15 Apr 18:24 1776266679106_m2.jpg
-rw-r--r-- 1 lukas staff 278951 15 Apr 18:24 1776266682164_m2.jpg
-rw-r--r-- 1 lukas staff 208465 15 Apr 18:24 1776266687272_m1.jpg
-rw-r--r-- 1 lukas staff 208398 15 Apr 18:24 1776266690323_m1.jpg
-rw-r--r-- 1 lukas staff 273693 15 Apr 18:24 1776266691227_m2.jpg
-rw-r--r-- 1 lukas staff 185943 15 Apr 18:24 1776266696382_m1.jpg
-rw-r--r-- 1 lukas staff 271869 15 Apr 18:24 1776266697274_m2.jpg
-rw-r--r-- 1 lukas staff 366699 15 Apr 18:25 1776266705465_m1.jpg
-rw-r--r-- 1 lukas staff 186079 15 Apr 18:25 1776266708505_m1.jpg
-rw-r--r-- 1 lukas staff 1292480 15 Apr 10:09 compact_monitor_1_1776236979346.mp4
-rw-r--r-- 1 lukas staff 6304039 15 Apr 10:14 compact_monitor_1_1776237284692.mp4
-rw-r--r-- 1 lukas staff 2514313 15 Apr 10:19 compact_monitor_1_1776237595554.mp4
-rw-r--r-- 1 lukas staff 2821904 15 Apr 10:25 compact_monitor_1_1776237899635.mp4
-rw-r--r-- 1 lukas staff 2785297 15 Apr 10:30 compact_monitor_1_1776238207393.mp4
-rw-r--r-- 1 lukas staff 1639472 15 Apr 10:35 compact_monitor_1_1776238512537.mp4
-rw-r--r-- 1 lukas staff 3207933 15 Apr 10:40 compact_monitor_1_1776238815528.mp4
-rw-r--r-- 1 lukas staff 3594658 15 Apr 10:45 compact_monitor_1_1776239122381.mp4
-rw-r--r-- 1 lukas staff 3671517 15 Apr 10:50 compact_monitor_1_1776239429225.mp4
-rw-r--r-- 1 lukas staff 4031948 15 Apr 10:55 compact_monitor_1_1776239734998.mp4
-rw-r--r-- 1 lukas staff 3529461 15 Apr 11:00 compact_monitor_1_1776240042925.mp4
-rw-r--r-- 1 lukas staff 5234845 15 Apr 11:05 compact_monitor_1_1776240349311.mp4
-rw-r--r-- 1 lukas staff 3323085 15 Apr 11:11 compact_monitor_1_1776240657823.mp4
-rw-r--r-- 1 lukas staff 2204215 15 Apr 11:16 compact_monitor_1_1776240963306.mp4
-rw-r--r-- 1 lukas staff 2387534 15 Apr 11:21 compact_monitor_1_1776241266776.mp4
-rw-r--r-- 1 lukas staff 4921676 15 Apr 11:26 compact_monitor_1_1776241570939.mp4
-rw-r--r-- 1 lukas staff 2135612 15 Apr 11:31 compact_monitor_1_1776241878162.mp4
-rw-r--r-- 1 lukas staff 494014 15 Apr 11:36 compact_monitor_1_1776242182944.mp4
-rw-r--r-- 1 lukas staff 1986658 15 Apr 11:41 compact_monitor_1_1776242488565.mp4
-rw-r--r-- 1 lukas staff 1651327 15 Apr 11:46 compact_monitor_1_1776242792386.mp4
-rw-r--r-- 1 lukas staff 190056 15 Apr 11:51 compact_monitor_1_1776243099454.mp4
-rw-r--r-- 1 lukas staff 489195 15 Apr 11:56 compact_monitor_1_1776243401560.mp4
-rw-r--r-- 1 lukas staff 637245 15 Apr 12:01 compact_monitor_1_1776243707339.mp4
-rw-r--r-- 1 lukas staff 836102 15 Apr 12:06 compact_monitor_1_1776244016111.mp4
-rw-r--r-- 1 lukas staff 2250311 15 Apr 12:12 compact_monitor_1_1776244325248.mp4
-rw-r--r-- 1 lukas staff 4438961 15 Apr 12:17 compact_monitor_1_1776244633485.mp4
-rw-r--r-- 1 lukas staff 2024811 15 Apr 12:22 compact_monitor_1_1776244939105.mp4
-rw-r--r-- 1 lukas staff 1140502 15 Apr 12:27 compact_monitor_1_1776245242576.mp4
-rw-r--r-- 1 lukas staff 818870 15 Apr 12:32 compact_monitor_1_1776245545145.mp4
-rw-r--r-- 1 lukas staff 506104 15 Apr 12:37 compact_monitor_1_1776245850845.mp4
-rw-r--r-- 1 lukas staff 506372 15 Apr 12:42 compact_monitor_1_1776246157330.mp4
-rw-r--r-- 1 lukas staff 585365 15 Apr 12:47 compact_monitor_1_1776246461621.mp4
-rw-r--r-- 1 lukas staff 1536187 15 Apr 12:52 compact_monitor_1_1776246766463.mp4
-rw-r--r-- 1 lukas staff 2825443 15 Apr 12:57 compact_monitor_1_1776247072489.mp4
-rw-r--r-- 1 lukas staff 3094796 15 Apr 13:03 compact_monitor_1_1776247379957.mp4
-rw-r--r-- 1 lukas staff 396633 15 Apr 13:08 compact_monitor_1_1776247688246.mp4
-rw-r--r-- 1 lukas staff 909684 15 Apr 13:13 compact_monitor_1_1776247993728.mp4
-rw-r--r-- 1 lukas staff 1577484 15 Apr 13:18 compact_monitor_1_1776248301121.mp4
-rw-r--r-- 1 lukas staff 1079237 15 Apr 13:23 compact_monitor_1_1776248607315.mp4
-rw-r--r-- 1 lukas staff 1091368 15 Apr 13:28 compact_monitor_1_1776248924298.mp4
-rw-r--r-- 1 lukas staff 925798 15 Apr 13:34 compact_monitor_1_1776249241863.mp4
-rw-r--r-- 1 lukas staff 1024193 15 Apr 13:39 compact_monitor_1_1776249553464.mp4
-rw-r--r-- 1 lukas staff 1965175 15 Apr 13:44 compact_monitor_1_1776249871482.mp4
-rw-r--r-- 1 lukas staff 942071 15 Apr 13:49 compact_monitor_1_1776250182641.mp4
-rw-r--r-- 1 lukas staff 1036861 15 Apr 13:55 compact_monitor_1_1776250503790.mp4
-rw-r--r-- 1 lukas staff 1084939 15 Apr 14:00 compact_monitor_1_1776250829184.mp4
-rw-r--r-- 1 lukas staff 1137305 15 Apr 14:05 compact_monitor_1_1776251148270.mp4
-rw-r--r-- 1 lukas staff 1084917 15 Apr 14:13 compact_monitor_1_1776251623899.mp4
-rw-r--r-- 1 lukas staff 472006 15 Apr 14:18 compact_monitor_1_1776251937854.mp4
-rw-r--r-- 1 lukas staff 2195675 15 Apr 14:24 compact_monitor_1_1776252241210.mp4
-rw-r--r-- 1 lukas staff 2126366 15 Apr 14:29 compact_monitor_1_1776252546881.mp4
-rw-r--r-- 1 lukas staff 1223098 15 Apr 14:34 compact_monitor_1_1776252863758.mp4
-rw-r--r-- 1 lukas staff 1554811 15 Apr 14:39 compact_monitor_1_1776253185709.mp4
-rw-r--r-- 1 lukas staff 283980 15 Apr 14:39 compact_monitor_1_1776253191237.mp4
-rw-r--r-- 1 lukas staff 1004738 15 Apr 14:45 compact_monitor_1_1776253502852.mp4
-rw-r--r-- 1 lukas staff 1007213 15 Apr 14:50 compact_monitor_1_1776253806491.mp4
-rw-r--r-- 1 lukas staff 1622820 15 Apr 14:55 compact_monitor_1_1776254109375.mp4
-rw-r--r-- 1 lukas staff 1800819 15 Apr 15:00 compact_monitor_1_1776254415281.mp4
-rw-r--r-- 1 lukas staff 1248853 15 Apr 15:05 compact_monitor_1_1776254720441.mp4
-rw-r--r-- 1 lukas staff 1358099 15 Apr 15:10 compact_monitor_1_1776255026922.mp4
-rw-r--r-- 1 lukas staff 1077547 15 Apr 15:15 compact_monitor_1_1776255334430.mp4
-rw-r--r-- 1 lukas staff 1194727 15 Apr 15:20 compact_monitor_1_1776255638369.mp4
-rw-r--r-- 1 lukas staff 1312132 15 Apr 15:25 compact_monitor_1_1776255944046.mp4
-rw-r--r-- 1 lukas staff 2526518 15 Apr 15:30 compact_monitor_1_1776256247989.mp4
-rw-r--r-- 1 lukas staff 2591568 15 Apr 15:35 compact_monitor_1_1776256553209.mp4
-rw-r--r-- 1 lukas staff 347132 15 Apr 15:41 compact_monitor_1_1776256862331.mp4
-rw-r--r-- 1 lukas staff 331422 15 Apr 15:46 compact_monitor_1_1776257183524.mp4
-rw-r--r-- 1 lukas staff 1507338 15 Apr 15:51 compact_monitor_1_1776257499295.mp4
-rw-r--r-- 1 lukas staff 1080123 15 Apr 15:57 compact_monitor_1_1776257818639.mp4
-rw-r--r-- 1 lukas staff 1048617 15 Apr 16:02 compact_monitor_1_1776258139836.mp4
-rw-r--r-- 1 lukas staff 1151460 15 Apr 16:07 compact_monitor_1_1776258462628.mp4
-rw-r--r-- 1 lukas staff 1206649 15 Apr 16:13 compact_monitor_1_1776258784114.mp4
-rw-r--r-- 1 lukas staff 1133984 15 Apr 16:18 compact_monitor_1_1776259107952.mp4
-rw-r--r-- 1 lukas staff 1142984 15 Apr 16:23 compact_monitor_1_1776259433131.mp4
-rw-r--r-- 1 lukas staff 1253153 15 Apr 16:29 compact_monitor_1_1776259757534.mp4
-rw-r--r-- 1 lukas staff 998310 15 Apr 16:34 compact_monitor_1_1776260076664.mp4
-rw-r--r-- 1 lukas staff 1065076 15 Apr 16:40 compact_monitor_1_1776260397335.mp4
-rw-r--r-- 1 lukas staff 1099220 15 Apr 16:45 compact_monitor_1_1776260721850.mp4
-rw-r--r-- 1 lukas staff 1154961 15 Apr 16:50 compact_monitor_1_1776261044836.mp4
-rw-r--r-- 1 lukas staff 1065431 15 Apr 16:56 compact_monitor_1_1776261372103.mp4
-rw-r--r-- 1 lukas staff 984542 15 Apr 17:01 compact_monitor_1_1776261696699.mp4
-rw-r--r-- 1 lukas staff 451220 15 Apr 17:01 compact_monitor_1_1776261702497.mp4
-rw-r--r-- 1 lukas staff 1211676 15 Apr 17:07 compact_monitor_1_1776262024768.mp4
-rw-r--r-- 1 lukas staff 1161330 15 Apr 17:12 compact_monitor_1_1776262344982.mp4
-rw-r--r-- 1 lukas staff 1052573 15 Apr 17:17 compact_monitor_1_1776262664755.mp4
-rw-r--r-- 1 lukas staff 418716 15 Apr 17:17 compact_monitor_1_1776262670708.mp4
-rw-r--r-- 1 lukas staff 1682982 15 Apr 17:23 compact_monitor_1_1776262992301.mp4
-rw-r--r-- 1 lukas staff 1073481 15 Apr 17:28 compact_monitor_1_1776263309511.mp4
-rw-r--r-- 1 lukas staff 1192672 15 Apr 17:34 compact_monitor_1_1776263636829.mp4
-rw-r--r-- 1 lukas staff 383279 15 Apr 17:34 compact_monitor_1_1776263642876.mp4
-rw-r--r-- 1 lukas staff 1357937 15 Apr 17:39 compact_monitor_1_1776263965549.mp4
-rw-r--r-- 1 lukas staff 1057912 15 Apr 17:44 compact_monitor_1_1776264293030.mp4
-rw-r--r-- 1 lukas staff 1055882 15 Apr 17:50 compact_monitor_1_1776264619470.mp4
-rw-r--r-- 1 lukas staff 1173057 15 Apr 17:55 compact_monitor_1_1776264946265.mp4
-rw-r--r-- 1 lukas staff 1162002 15 Apr 18:01 compact_monitor_1_1776265273041.mp4
-rw-r--r-- 1 lukas staff 410666 15 Apr 18:01 compact_monitor_1_1776265279242.mp4
-rw-r--r-- 1 lukas staff 1213530 15 Apr 18:06 compact_monitor_1_1776265602616.mp4
-rw-r--r-- 1 lukas staff 1210935 15 Apr 18:12 compact_monitor_1_1776265929948.mp4
-rw-r--r-- 1 lukas staff 355364 15 Apr 18:12 compact_monitor_1_1776265935884.mp4
-rw-r--r-- 1 lukas staff 985021 15 Apr 18:17 compact_monitor_1_1776266259356.mp4
-rw-r--r-- 1 lukas staff 448474 15 Apr 18:17 compact_monitor_1_1776266265353.mp4
-rw-r--r-- 1 lukas staff 1007624 15 Apr 18:23 compact_monitor_1_1776266587803.mp4
-rw-r--r-- 1 lukas staff 417702 15 Apr 18:23 compact_monitor_1_1776266593821.mp4
-rw-r--r-- 1 lukas staff 3815275 15 Apr 10:09 compact_monitor_2_1776236981488.mp4
-rw-r--r-- 1 lukas staff 3854792 15 Apr 10:14 compact_monitor_2_1776237291726.mp4
-rw-r--r-- 1 lukas staff 367131 15 Apr 10:19 compact_monitor_2_1776237598300.mp4
-rw-r--r-- 1 lukas staff 3965510 15 Apr 10:25 compact_monitor_2_1776237902921.mp4
-rw-r--r-- 1 lukas staff 468839 15 Apr 10:30 compact_monitor_2_1776238211071.mp4
-rw-r--r-- 1 lukas staff 395077 15 Apr 10:35 compact_monitor_2_1776238514343.mp4
-rw-r--r-- 1 lukas staff 1309545 15 Apr 10:40 compact_monitor_2_1776238819191.mp4
-rw-r--r-- 1 lukas staff 2579871 15 Apr 10:45 compact_monitor_2_1776239125548.mp4
-rw-r--r-- 1 lukas staff 2261244 15 Apr 10:50 compact_monitor_2_1776239432484.mp4
-rw-r--r-- 1 lukas staff 1614099 15 Apr 10:55 compact_monitor_2_1776239738314.mp4
-rw-r--r-- 1 lukas staff 1396501 15 Apr 11:00 compact_monitor_2_1776240046668.mp4
-rw-r--r-- 1 lukas staff 2608327 15 Apr 11:05 compact_monitor_2_1776240354465.mp4
-rw-r--r-- 1 lukas staff 1343284 15 Apr 11:11 compact_monitor_2_1776240661129.mp4
-rw-r--r-- 1 lukas staff 104083 15 Apr 11:16 compact_monitor_2_1776240965780.mp4
-rw-r--r-- 1 lukas staff 1696225 15 Apr 11:21 compact_monitor_2_1776241269257.mp4
-rw-r--r-- 1 lukas staff 3038037 15 Apr 11:26 compact_monitor_2_1776241574093.mp4
-rw-r--r-- 1 lukas staff 2308673 15 Apr 11:31 compact_monitor_2_1776241879955.mp4
-rw-r--r-- 1 lukas staff 3684492 15 Apr 11:36 compact_monitor_2_1776242185232.mp4
-rw-r--r-- 1 lukas staff 1318134 15 Apr 11:41 compact_monitor_2_1776242490310.mp4
-rw-r--r-- 1 lukas staff 2429835 15 Apr 11:46 compact_monitor_2_1776242794849.mp4
-rw-r--r-- 1 lukas staff 760204 15 Apr 11:51 compact_monitor_2_1776243100430.mp4
-rw-r--r-- 1 lukas staff 2563357 15 Apr 11:56 compact_monitor_2_1776243402772.mp4
-rw-r--r-- 1 lukas staff 2270439 15 Apr 12:01 compact_monitor_2_1776243709288.mp4
-rw-r--r-- 1 lukas staff 1591957 15 Apr 12:07 compact_monitor_2_1776244019480.mp4
-rw-r--r-- 1 lukas staff 1448741 15 Apr 12:12 compact_monitor_2_1776244328555.mp4
-rw-r--r-- 1 lukas staff 3297885 15 Apr 12:17 compact_monitor_2_1776244636345.mp4
-rw-r--r-- 1 lukas staff 1088455 15 Apr 12:22 compact_monitor_2_1776244941048.mp4
-rw-r--r-- 1 lukas staff 398901 15 Apr 12:27 compact_monitor_2_1776245243901.mp4
-rw-r--r-- 1 lukas staff 1511792 15 Apr 12:32 compact_monitor_2_1776245547006.mp4
-rw-r--r-- 1 lukas staff 1331771 15 Apr 12:37 compact_monitor_2_1776245852471.mp4
-rw-r--r-- 1 lukas staff 923996 15 Apr 12:42 compact_monitor_2_1776246158613.mp4
-rw-r--r-- 1 lukas staff 2568982 15 Apr 12:47 compact_monitor_2_1776246463035.mp4
-rw-r--r-- 1 lukas staff 3313949 15 Apr 12:52 compact_monitor_2_1776246768685.mp4
-rw-r--r-- 1 lukas staff 4771645 15 Apr 12:57 compact_monitor_2_1776247076079.mp4
-rw-r--r-- 1 lukas staff 6586185 15 Apr 13:03 compact_monitor_2_1776247382530.mp4
-rw-r--r-- 1 lukas staff 2358604 15 Apr 13:08 compact_monitor_2_1776247690007.mp4
-rw-r--r-- 1 lukas staff 2980294 15 Apr 13:13 compact_monitor_2_1776247996783.mp4
-rw-r--r-- 1 lukas staff 3036356 15 Apr 13:18 compact_monitor_2_1776248303327.mp4
-rw-r--r-- 1 lukas staff 13739308 15 Apr 13:23 compact_monitor_2_1776248612102.mp4
-rw-r--r-- 1 lukas staff 1792715 15 Apr 13:23 compact_monitor_2_1776248622198.mp4
-rw-r--r-- 1 lukas staff 19438020 15 Apr 13:28 compact_monitor_2_1776248929123.mp4
-rw-r--r-- 1 lukas staff 1542891 15 Apr 13:29 compact_monitor_2_1776248939710.mp4
-rw-r--r-- 1 lukas staff 18764167 15 Apr 13:34 compact_monitor_2_1776249244616.mp4
-rw-r--r-- 1 lukas staff 29428799 15 Apr 13:39 compact_monitor_2_1776249557895.mp4
-rw-r--r-- 1 lukas staff 12512925 15 Apr 13:44 compact_monitor_2_1776249875231.mp4
-rw-r--r-- 1 lukas staff 30936872 15 Apr 13:50 compact_monitor_2_1776250186990.mp4
-rw-r--r-- 1 lukas staff 2793009 15 Apr 13:50 compact_monitor_2_1776250201560.mp4
-rw-r--r-- 1 lukas staff 33052595 15 Apr 13:55 compact_monitor_2_1776250510466.mp4
-rw-r--r-- 1 lukas staff 8811443 15 Apr 13:55 compact_monitor_2_1776250525325.mp4
-rw-r--r-- 1 lukas staff 36732130 15 Apr 14:00 compact_monitor_2_1776250833909.mp4
-rw-r--r-- 1 lukas staff 808116 15 Apr 14:00 compact_monitor_2_1776250847678.mp4
-rw-r--r-- 1 lukas staff 35963507 15 Apr 14:06 compact_monitor_2_1776251153283.mp4
-rw-r--r-- 1 lukas staff 17255576 15 Apr 14:13 compact_monitor_2_1776251627877.mp4
-rw-r--r-- 1 lukas staff 217409 15 Apr 14:18 compact_monitor_2_1776251938719.mp4
-rw-r--r-- 1 lukas staff 2179896 15 Apr 14:24 compact_monitor_2_1776252243501.mp4
-rw-r--r-- 1 lukas staff 24202787 15 Apr 14:29 compact_monitor_2_1776252550645.mp4
-rw-r--r-- 1 lukas staff 40541441 15 Apr 14:34 compact_monitor_2_1776252869026.mp4
-rw-r--r-- 1 lukas staff 1969819 15 Apr 14:34 compact_monitor_2_1776252884388.mp4
-rw-r--r-- 1 lukas staff 26185693 15 Apr 14:40 compact_monitor_2_1776253191567.mp4
-rw-r--r-- 1 lukas staff 2958445 15 Apr 14:45 compact_monitor_2_1776253504333.mp4
-rw-r--r-- 1 lukas staff 1721625 15 Apr 14:50 compact_monitor_2_1776253807794.mp4
-rw-r--r-- 1 lukas staff 5168799 15 Apr 14:55 compact_monitor_2_1776254111721.mp4
-rw-r--r-- 1 lukas staff 1008125 15 Apr 15:00 compact_monitor_2_1776254418941.mp4
-rw-r--r-- 1 lukas staff 2805751 15 Apr 15:05 compact_monitor_2_1776254723846.mp4
-rw-r--r-- 1 lukas staff 4263256 15 Apr 15:10 compact_monitor_2_1776255030878.mp4
-rw-r--r-- 1 lukas staff 1855151 15 Apr 15:15 compact_monitor_2_1776255336562.mp4
-rw-r--r-- 1 lukas staff 1068172 15 Apr 15:20 compact_monitor_2_1776255640728.mp4
-rw-r--r-- 1 lukas staff 393423 15 Apr 15:25 compact_monitor_2_1776255946991.mp4
-rw-r--r-- 1 lukas staff 1066924 15 Apr 15:30 compact_monitor_2_1776256250851.mp4
-rw-r--r-- 1 lukas staff 4522183 15 Apr 15:36 compact_monitor_2_1776256557162.mp4
-rw-r--r-- 1 lukas staff 21285442 15 Apr 15:41 compact_monitor_2_1776256868069.mp4
-rw-r--r-- 1 lukas staff 4799464 15 Apr 15:41 compact_monitor_2_1776256880438.mp4
-rw-r--r-- 1 lukas staff 25082442 15 Apr 15:46 compact_monitor_2_1776257187591.mp4
-rw-r--r-- 1 lukas staff 29377114 15 Apr 15:51 compact_monitor_2_1776257503657.mp4
-rw-r--r-- 1 lukas staff 2577148 15 Apr 15:51 compact_monitor_2_1776257516759.mp4
-rw-r--r-- 1 lukas staff 35197312 15 Apr 15:57 compact_monitor_2_1776257823244.mp4
-rw-r--r-- 1 lukas staff 739380 15 Apr 15:57 compact_monitor_2_1776257838858.mp4
-rw-r--r-- 1 lukas staff 39595503 15 Apr 16:02 compact_monitor_2_1776258144789.mp4
-rw-r--r-- 1 lukas staff 2671413 15 Apr 16:02 compact_monitor_2_1776258160717.mp4
-rw-r--r-- 1 lukas staff 33576004 15 Apr 16:08 compact_monitor_2_1776258467332.mp4
-rw-r--r-- 1 lukas staff 3404945 15 Apr 16:08 compact_monitor_2_1776258481869.mp4
-rw-r--r-- 1 lukas staff 36386887 15 Apr 16:13 compact_monitor_2_1776258789278.mp4
-rw-r--r-- 1 lukas staff 2717076 15 Apr 16:13 compact_monitor_2_1776258804257.mp4
-rw-r--r-- 1 lukas staff 38542946 15 Apr 16:18 compact_monitor_2_1776259112717.mp4
-rw-r--r-- 1 lukas staff 6480087 15 Apr 16:18 compact_monitor_2_1776259128284.mp4
-rw-r--r-- 1 lukas staff 39076466 15 Apr 16:24 compact_monitor_2_1776259438063.mp4
-rw-r--r-- 1 lukas staff 4361748 15 Apr 16:24 compact_monitor_2_1776259453552.mp4
-rw-r--r-- 1 lukas staff 30743109 15 Apr 16:29 compact_monitor_2_1776259762038.mp4
-rw-r--r-- 1 lukas staff 35230072 15 Apr 16:34 compact_monitor_2_1776260081207.mp4
-rw-r--r-- 1 lukas staff 44719930 15 Apr 16:40 compact_monitor_2_1776260402183.mp4
-rw-r--r-- 1 lukas staff 40699319 15 Apr 16:45 compact_monitor_2_1776260727063.mp4
-rw-r--r-- 1 lukas staff 40175062 15 Apr 16:51 compact_monitor_2_1776261051104.mp4
-rw-r--r-- 1 lukas staff 10100456 15 Apr 16:51 compact_monitor_2_1776261066254.mp4
-rw-r--r-- 1 lukas staff 40218171 15 Apr 16:56 compact_monitor_2_1776261377240.mp4
-rw-r--r-- 1 lukas staff 10164441 15 Apr 16:56 compact_monitor_2_1776261392293.mp4
-rw-r--r-- 1 lukas staff 39679757 15 Apr 17:01 compact_monitor_2_1776261703501.mp4
-rw-r--r-- 1 lukas staff 16362780 15 Apr 17:02 compact_monitor_2_1776261718068.mp4
-rw-r--r-- 1 lukas staff 35673196 15 Apr 17:07 compact_monitor_2_1776262030308.mp4
-rw-r--r-- 1 lukas staff 418425 15 Apr 17:07 compact_monitor_2_1776262044183.mp4
-rw-r--r-- 1 lukas staff 38695493 15 Apr 17:12 compact_monitor_2_1776262350156.mp4
-rw-r--r-- 1 lukas staff 41039121 15 Apr 17:18 compact_monitor_2_1776262671510.mp4
-rw-r--r-- 1 lukas staff 14440675 15 Apr 17:18 compact_monitor_2_1776262686451.mp4
-rw-r--r-- 1 lukas staff 29155784 15 Apr 17:23 compact_monitor_2_1776262997519.mp4
-rw-r--r-- 1 lukas staff 38013561 15 Apr 17:28 compact_monitor_2_1776263315513.mp4
-rw-r--r-- 1 lukas staff 13728546 15 Apr 17:28 compact_monitor_2_1776263330175.mp4
-rw-r--r-- 1 lukas staff 42282890 15 Apr 17:34 compact_monitor_2_1776263643561.mp4
-rw-r--r-- 1 lukas staff 15975636 15 Apr 17:34 compact_monitor_2_1776263659153.mp4
-rw-r--r-- 1 lukas staff 42361074 15 Apr 17:39 compact_monitor_2_1776263971167.mp4
-rw-r--r-- 1 lukas staff 12206045 15 Apr 17:39 compact_monitor_2_1776263987012.mp4
-rw-r--r-- 1 lukas staff 46367818 15 Apr 17:45 compact_monitor_2_1776264298000.mp4
-rw-r--r-- 1 lukas staff 8981811 15 Apr 17:45 compact_monitor_2_1776264315186.mp4
-rw-r--r-- 1 lukas staff 39268566 15 Apr 17:50 compact_monitor_2_1776264625122.mp4
-rw-r--r-- 1 lukas staff 14427002 15 Apr 17:50 compact_monitor_2_1776264640284.mp4
-rw-r--r-- 1 lukas staff 39524622 15 Apr 17:56 compact_monitor_2_1776264952043.mp4
-rw-r--r-- 1 lukas staff 12413344 15 Apr 17:56 compact_monitor_2_1776264966984.mp4
-rw-r--r-- 1 lukas staff 37530622 15 Apr 18:01 compact_monitor_2_1776265280164.mp4
-rw-r--r-- 1 lukas staff 16392257 15 Apr 18:01 compact_monitor_2_1776265294548.mp4
-rw-r--r-- 1 lukas staff 43552334 15 Apr 18:07 compact_monitor_2_1776265608065.mp4
-rw-r--r-- 1 lukas staff 6335856 15 Apr 18:07 compact_monitor_2_1776265624847.mp4
-rw-r--r-- 1 lukas staff 40102732 15 Apr 18:12 compact_monitor_2_1776265936487.mp4
-rw-r--r-- 1 lukas staff 10852075 15 Apr 18:12 compact_monitor_2_1776265950996.mp4
-rw-r--r-- 1 lukas staff 33010772 15 Apr 18:17 compact_monitor_2_1776266266304.mp4
-rw-r--r-- 1 lukas staff 12302090 15 Apr 18:18 compact_monitor_2_1776266279297.mp4
-rw-r--r-- 1 lukas staff 37997133 15 Apr 18:23 compact_monitor_2_1776266594590.mp4
-rw-r--r-- 1 lukas staff 13660744 15 Apr 18:23 compact_monitor_2_1776266608276.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-15 $ ll
total 4476272
drwxr-xr-x 740 lukas staff 23680 15 Apr 18:38 .
drwxr-xr-x 9 lukas staff 288 15 Apr 09:58 ..
-rw-r--r-- 1 lukas staff 669036 15 Apr 18:13 1776265985239_m2.jpg
-rw-r--r-- 1 lukas staff 203719 15 Apr 18:13 1776265985279_m1.jpg
-rw-r--r-- 1 lukas staff 203612 15 Apr 18:13 1776265987070_m1.jpg
-rw-r--r-- 1 lukas staff 674275 15 Apr 18:13 1776265987771_m2.jpg
-rw-r--r-- 1 lukas staff 203511 15 Apr 18:13 1776265989538_m1.jpg
-rw-r--r-- 1 lukas staff 667384 15 Apr 18:13 1776265989967_m2.jpg
-rw-r--r-- 1 lukas staff 203666 15 Apr 18:13 1776265991616_m1.jpg
-rw-r--r-- 1 lukas staff 669140 15 Apr 18:13 1776265992196_m2.jpg
-rw-r--r-- 1 lukas staff 203595 15 Apr 18:13 1776265993913_m1.jpg
-rw-r--r-- 1 lukas staff 680910 15 Apr 18:13 1776265994505_m2.jpg
-rw-r--r-- 1 lukas staff 203581 15 Apr 18:13 1776265996130_m1.jpg
-rw-r--r-- 1 lukas staff 670428 15 Apr 18:13 1776265996652_m2.jpg
-rw-r--r-- 1 lukas staff 203708 15 Apr 18:13 1776265998298_m1.jpg
-rw-r--r-- 1 lukas staff 659876 15 Apr 18:13 1776265998619_m2.jpg
-rw-r--r-- 1 lukas staff 203790 15 Apr 18:13 1776266000317_m1.jpg
-rw-r--r-- 1 lukas staff 675595 15 Apr 18:13 1776266000927_m2.jpg
-rw-r--r-- 1 lukas staff 203772 15 Apr 18:13 1776266002837_m1.jpg
-rw-r--r-- 1 lukas staff 681185 15 Apr 18:13 1776266003295_m2.jpg
-rw-r--r-- 1 lukas staff 203737 15 Apr 18:13 1776266004906_m1.jpg
-rw-r--r-- 1 lukas staff 674774 15 Apr 18:13 1776266005279_m2.jpg
-rw-r--r-- 1 lukas staff 203710 15 Apr 18:13 1776266007045_m1.jpg
-rw-r--r-- 1 lukas staff 672301 15 Apr 18:13 1776266007562_m2.jpg
-rw-r--r-- 1 lukas staff 203778 15 Apr 18:13 1776266009409_m1.jpg
-rw-r--r-- 1 lukas staff 647795 15 Apr 18:13 1776266009873_m2.jpg
-rw-r--r-- 1 lukas staff 203773 15 Apr 18:13 1776266011796_m1.jpg
-rw-r--r-- 1 lukas staff 621588 15 Apr 18:13 1776266012145_m2.jpg
-rw-r--r-- 1 lukas staff 203797 15 Apr 18:13 1776266013610_m1.jpg
-rw-r--r-- 1 lukas staff 557210 15 Apr 18:13 1776266013959_m2.jpg
-rw-r--r-- 1 lukas staff 203799 15 Apr 18:13 1776266015437_m1.jpg
-rw-r--r-- 1 lukas staff 576074 15 Apr 18:13 1776266015791_m2.jpg
-rw-r--r-- 1 lukas staff 203846 15 Apr 18:13 1776266017399_m1.jpg
-rw-r--r-- 1 lukas staff 592254 15 Apr 18:13 1776266017945_m2.jpg
-rw-r--r-- 1 lukas staff 203767 15 Apr 18:13 1776266019677_m1.jpg
-rw-r--r-- 1 lukas staff 554944 15 Apr 18:13 1776266020127_m2.jpg
-rw-r--r-- 1 lukas staff 203706 15 Apr 18:13 1776266022131_m1.jpg
-rw-r--r-- 1 lukas staff 584193 15 Apr 18:13 1776266022505_m2.jpg
-rw-r--r-- 1 lukas staff 203718 15 Apr 18:13 1776266024358_m1.jpg
-rw-r--r-- 1 lukas staff 586235 15 Apr 18:13 1776266024952_m2.jpg
-rw-r--r-- 1 lukas staff 203609 15 Apr 18:13 1776266026730_m1.jpg
-rw-r--r-- 1 lukas staff 582376 15 Apr 18:13 1776266027279_m2.jpg
-rw-r--r-- 1 lukas staff 203696 15 Apr 18:13 1776266028710_m1.jpg
-rw-r--r-- 1 lukas staff 568913 15 Apr 18:13 1776266029111_m2.jpg
-rw-r--r-- 1 lukas staff 203648 15 Apr 18:13 1776266030751_m1.jpg
-rw-r--r-- 1 lukas staff 431509 15 Apr 18:13 1776266031143_m2.jpg
-rw-r--r-- 1 lukas staff 468169 15 Apr 18:13 1776266033149_m2.jpg
-rw-r--r-- 1 lukas staff 203714 15 Apr 18:13 1776266033552_m1.jpg
-rw-r--r-- 1 lukas staff 203753 15 Apr 18:13 1776266035546_m1.jpg
-rw-r--r-- 1 lukas staff 477414 15 Apr 18:13 1776266036047_m2.jpg
-rw-r--r-- 1 lukas staff 203704 15 Apr 18:13 1776266037947_m1.jpg
-rw-r--r-- 1 lukas staff 476980 15 Apr 18:13 1776266038370_m2.jpg
-rw-r--r-- 1 lukas staff 203686 15 Apr 18:14 1776266040183_m1.jpg
-rw-r--r-- 1 lukas staff 485156 15 Apr 18:14 1776266040577_m2.jpg
-rw-r--r-- 1 lukas staff 486141 15 Apr 18:14 1776266042413_m2.jpg
-rw-r--r-- 1 lukas staff 490784 15 Apr 18:14 1776266043473_m2.jpg
-rw-r--r-- 1 lukas staff 556817 15 Apr 18:14 1776266044640_m2.jpg
-rw-r--r-- 1 lukas staff 588963 15 Apr 18:14 1776266045757_m2.jpg
-rw-r--r-- 1 lukas staff 591407 15 Apr 18:14 1776266046926_m2.jpg
-rw-r--r-- 1 lukas staff 204286 15 Apr 18:14 1776266048022_m1.jpg
-rw-r--r-- 1 lukas staff 592997 15 Apr 18:14 1776266048341_m2.jpg
-rw-r--r-- 1 lukas staff 204367 15 Apr 18:14 1776266050092_m1.jpg
-rw-r--r-- 1 lukas staff 595109 15 Apr 18:14 1776266050576_m2.jpg
-rw-r--r-- 1 lukas staff 203877 15 Apr 18:14 1776266052271_m1.jpg
-rw-r--r-- 1 lukas staff 617722 15 Apr 18:14 1776266052711_m2.jpg
-rw-r--r-- 1 lukas staff 566247 15 Apr 18:14 1776266054920_m2.jpg
-rw-r--r-- 1 lukas staff 587163 15 Apr 18:14 1776266056075_m2.jpg
-rw-r--r-- 1 lukas staff 203881 15 Apr 18:14 1776266056756_m1.jpg
-rw-r--r-- 1 lukas staff 590009 15 Apr 18:14 1776266057195_m2.jpg
-rw-r--r-- 1 lukas staff 559463 15 Apr 18:14 1776266059115_m2.jpg
-rw-r--r-- 1 lukas staff 203874 15 Apr 18:14 1776266060554_m1.jpg
-rw-r--r-- 1 lukas staff 596850 15 Apr 18:14 1776266060554_m2.jpg
-rw-r--r-- 1 lukas staff 203900 15 Apr 18:14 1776266062752_m1.jpg
-rw-r--r-- 1 lukas staff 441354 15 Apr 18:14 1776266066711_m2.jpg
-rw-r--r-- 1 lukas staff 55745 15 Apr 18:14 1776266068595_m1.jpg
-rw-r--r-- 1 lukas staff 446599 15 Apr 18:14 1776266069433_m2.jpg
-rw-r--r-- 1 lukas staff 446609 15 Apr 18:14 1776266070172_m2.jpg
-rw-r--r-- 1 lukas staff 94532 15 Apr 18:14 1776266070176_m1.jpg
-rw-r--r-- 1 lukas staff 88474 15 Apr 18:14 1776266071656_m1.jpg
-rw-r--r-- 1 lukas staff 535766 15 Apr 18:14 1776266072584_m2.jpg
-rw-r--r-- 1 lukas staff 92870 15 Apr 18:14 1776266074845_m1.jpg
-rw-r--r-- 1 lukas staff 88052 15 Apr 18:14 1776266077692_m1.jpg
-rw-r--r-- 1 lukas staff 88179 15 Apr 18:14 1776266082536_m1.jpg
-rw-r--r-- 1 lukas staff 533426 15 Apr 18:14 1776266082536_m2.jpg
-rw-r--r-- 1 lukas staff 88175 15 Apr 18:14 1776266084440_m1.jpg
-rw-r--r-- 1 lukas staff 500743 15 Apr 18:14 1776266084440_m2.jpg
-rw-r--r-- 1 lukas staff 502910 15 Apr 18:14 1776266085860_m2.jpg
-rw-r--r-- 1 lukas staff 88161 15 Apr 18:14 1776266087714_m1.jpg
-rw-r--r-- 1 lukas staff 562872 15 Apr 18:14 1776266087714_m2.jpg
-rw-r--r-- 1 lukas staff 507401 15 Apr 18:14 1776266091668_m2.jpg
-rw-r--r-- 1 lukas staff 88198 15 Apr 18:14 1776266091678_m1.jpg
-rw-r--r-- 1 lukas staff 556350 15 Apr 18:14 1776266096275_m2.jpg
-rw-r--r-- 1 lukas staff 574870 15 Apr 18:14 1776266099219_m2.jpg
-rw-r--r-- 1 lukas staff 88436 15 Apr 18:15 1776266104959_m1.jpg
-rw-r--r-- 1 lukas staff 254145 15 Apr 18:15 1776266105237_m2.jpg
-rw-r--r-- 1 lukas staff 88535 15 Apr 18:15 1776266106590_m1.jpg
-rw-r--r-- 1 lukas staff 276093 15 Apr 18:15 1776266106590_m2.jpg
-rw-r--r-- 1 lukas staff 95178 15 Apr 18:15 1776266107364_m1.jpg
-rw-r--r-- 1 lukas staff 272726 15 Apr 18:15 1776266107397_m2.jpg
-rw-r--r-- 1 lukas staff 272729 15 Apr 18:15 1776266108410_m2.jpg
-rw-r--r-- 1 lukas staff 95201 15 Apr 18:15 1776266108439_m1.jpg
-rw-r--r-- 1 lukas staff 207648 15 Apr 18:15 1776266110874_m1.jpg
-rw-r--r-- 1 lukas staff 272706 15 Apr 18:15 1776266111078_m2.jpg
-rw-r--r-- 1 lukas staff 208459 15 Apr 18:15 1776266111821_m1.jpg
-rw-r--r-- 1 lukas staff 212011 15 Apr 18:15 1776266113939_m1.jpg
-rw-r--r-- 1 lukas staff 272780 15 Apr 18:15 1776266122951_m2.jpg
-rw-r--r-- 1 lukas staff 211547 15 Apr 18:15 1776266122974_m1.jpg
-rw-r--r-- 1 lukas staff 209162 15 Apr 18:15 1776266123875_m1.jpg
-rw-r--r-- 1 lukas staff 205277 15 Apr 18:15 1776266125853_m1.jpg
-rw-r--r-- 1 lukas staff 272667 15 Apr 18:15 1776266125853_m2.jpg
-rw-r--r-- 1 lukas staff 272719 15 Apr 18:15 1776266127403_m2.jpg
-rw-r--r-- 1 lukas staff 206802 15 Apr 18:15 1776266127410_m1.jpg
-rw-r--r-- 1 lukas staff 213918 15 Apr 18:15 1776266130082_m1.jpg
-rw-r--r-- 1 lukas staff 212411 15 Apr 18:15 1776266132673_m1.jpg
-rw-r--r-- 1 lukas staff 272808 15 Apr 18:15 1776266132673_m2.jpg
-rw-r--r-- 1 lukas staff 207894 15 Apr 18:15 1776266133340_m1.jpg
-rw-r--r-- 1 lukas staff 555932 15 Apr 18:15 1776266134609_m2.jpg
-rw-r--r-- 1 lukas staff 207911 15 Apr 18:15 1776266135525_m1.jpg
-rw-r--r-- 1 lukas staff 548908 15 Apr 18:15 1776266137606_m2.jpg
-rw-r--r-- 1 lukas staff 207856 15 Apr 18:15 1776266138682_m1.jpg
-rw-r--r-- 1 lukas staff 560222 15 Apr 18:15 1776266140759_m2.jpg
-rw-r--r-- 1 lukas staff 560157 15 Apr 18:15 1776266143743_m2.jpg
-rw-r--r-- 1 lukas staff 207838 15 Apr 18:15 1776266144684_m1.jpg
-rw-r--r-- 1 lukas staff 537855 15 Apr 18:15 1776266145496_m2.jpg
-rw-r--r-- 1 lukas staff 587185 15 Apr 18:15 1776266147770_m2.jpg
-rw-r--r-- 1 lukas staff 209722 15 Apr 18:15 1776266150490_m1.jpg
-rw-r--r-- 1 lukas staff 216901 15 Apr 18:15 1776266150747_m2.jpg
-rw-r--r-- 1 lukas staff 208191 15 Apr 18:15 1776266153538_m1.jpg
-rw-r--r-- 1 lukas staff 258901 15 Apr 18:15 1776266153787_m2.jpg
-rw-r--r-- 1 lukas staff 276340 15 Apr 18:15 1776266156823_m2.jpg
-rw-r--r-- 1 lukas staff 208298 15 Apr 18:15 1776266158610_m1.jpg
-rw-r--r-- 1 lukas staff 590491 15 Apr 18:15 1776266158610_m2.jpg
-rw-r--r-- 1 lukas staff 208192 15 Apr 18:16 1776266160959_m1.jpg
-rw-r--r-- 1 lukas staff 545849 15 Apr 18:16 1776266161252_m2.jpg
-rw-r--r-- 1 lukas staff 208154 15 Apr 18:16 1776266163104_m1.jpg
-rw-r--r-- 1 lukas staff 519973 15 Apr 18:16 1776266164298_m2.jpg
-rw-r--r-- 1 lukas staff 208231 15 Apr 18:16 1776266165561_m1.jpg
-rw-r--r-- 1 lukas staff 593300 15 Apr 18:16 1776266166851_m2.jpg
-rw-r--r-- 1 lukas staff 574561 15 Apr 18:16 1776266168075_m2.jpg
-rw-r--r-- 1 lukas staff 208190 15 Apr 18:16 1776266168319_m1.jpg
-rw-r--r-- 1 lukas staff 208164 15 Apr 18:16 1776266170354_m1.jpg
-rw-r--r-- 1 lukas staff 558860 15 Apr 18:16 1776266170659_m2.jpg
-rw-r--r-- 1 lukas staff 517959 15 Apr 18:16 1776266175820_m2.jpg
-rw-r--r-- 1 lukas staff 208615 15 Apr 18:16 1776266177600_m1.jpg
-rw-r--r-- 1 lukas staff 562544 15 Apr 18:16 1776266177627_m2.jpg
-rw-r--r-- 1 lukas staff 208601 15 Apr 18:16 1776266180047_m1.jpg
-rw-r--r-- 1 lukas staff 582678 15 Apr 18:16 1776266180212_m2.jpg
-rw-r--r-- 1 lukas staff 208628 15 Apr 18:16 1776266181996_m1.jpg
-rw-r--r-- 1 lukas staff 208571 15 Apr 18:16 1776266185646_m1.jpg
-rw-r--r-- 1 lukas staff 594509 15 Apr 18:16 1776266185646_m2.jpg
-rw-r--r-- 1 lukas staff 208622 15 Apr 18:16 1776266187916_m1.jpg
-rw-r--r-- 1 lukas staff 608592 15 Apr 18:16 1776266188157_m2.jpg
-rw-r--r-- 1 lukas staff 599957 15 Apr 18:16 1776266190500_m2.jpg
-rw-r--r-- 1 lukas staff 208624 15 Apr 18:16 1776266190949_m1.jpg
-rw-r--r-- 1 lukas staff 208694 15 Apr 18:16 1776266193217_m1.jpg
-rw-r--r-- 1 lukas staff 615862 15 Apr 18:16 1776266193357_m2.jpg
-rw-r--r-- 1 lukas staff 208254 15 Apr 18:16 1776266195513_m1.jpg
-rw-r--r-- 1 lukas staff 624275 15 Apr 18:16 1776266195549_m2.jpg
-rw-r--r-- 1 lukas staff 645335 15 Apr 18:16 1776266197725_m2.jpg
-rw-r--r-- 1 lukas staff 208241 15 Apr 18:16 1776266198956_m1.jpg
-rw-r--r-- 1 lukas staff 646868 15 Apr 18:16 1776266199007_m2.jpg
-rw-r--r-- 1 lukas staff 208643 15 Apr 18:16 1776266202174_m1.jpg
-rw-r--r-- 1 lukas staff 652412 15 Apr 18:16 1776266202213_m2.jpg
-rw-r--r-- 1 lukas staff 208612 15 Apr 18:16 1776266206551_m1.jpg
-rw-r--r-- 1 lukas staff 656571 15 Apr 18:16 1776266206551_m2.jpg
-rw-r--r-- 1 lukas staff 208638 15 Apr 18:16 1776266209266_m1.jpg
-rw-r--r-- 1 lukas staff 658369 15 Apr 18:16 1776266209280_m2.jpg
-rw-r--r-- 1 lukas staff 208715 15 Apr 18:16 1776266212218_m1.jpg
-rw-r--r-- 1 lukas staff 659247 15 Apr 18:16 1776266212218_m2.jpg
-rw-r--r-- 1 lukas staff 208689 15 Apr 18:16 1776266215752_m1.jpg
-rw-r--r-- 1 lukas staff 653016 15 Apr 18:16 1776266215771_m2.jpg
-rw-r--r-- 1 lukas staff 586023 15 Apr 18:17 1776266219752_m2.jpg
-rw-r--r-- 1 lukas staff 208588 15 Apr 18:17 1776266220701_m1.jpg
-rw-r--r-- 1 lukas staff 633574 15 Apr 18:17 1776266221274_m2.jpg
-rw-r--r-- 1 lukas staff 636933 15 Apr 18:17 1776266227340_m2.jpg
-rw-r--r-- 1 lukas staff 639420 15 Apr 18:17 1776266232300_m2.jpg
-rw-r--r-- 1 lukas staff 208544 15 Apr 18:17 1776266232337_m1.jpg
-rw-r--r-- 1 lukas staff 643943 15 Apr 18:17 1776266236469_m2.jpg
-rw-r--r-- 1 lukas staff 208610 15 Apr 18:17 1776266236483_m1.jpg
-rw-r--r-- 1 lukas staff 208598 15 Apr 18:17 1776266238593_m1.jpg
-rw-r--r-- 1 lukas staff 630398 15 Apr 18:17 1776266238602_m2.jpg
-rw-r--r-- 1 lukas staff 624451 15 Apr 18:17 1776266240803_m2.jpg
-rw-r--r-- 1 lukas staff 208484 15 Apr 18:17 1776266242547_m1.jpg
-rw-r--r-- 1 lukas staff 630386 15 Apr 18:17 1776266242547_m2.jpg
-rw-r--r-- 1 lukas staff 208525 15 Apr 18:17 1776266244786_m1.jpg
-rw-r--r-- 1 lukas staff 633291 15 Apr 18:17 1776266245111_m2.jpg
-rw-r--r-- 1 lukas staff 545820 15 Apr 18:17 1776266247239_m2.jpg
-rw-r--r-- 1 lukas staff 547468 15 Apr 18:17 1776266248374_m2.jpg
-rw-r--r-- 1 lukas staff 208653 15 Apr 18:17 1776266248977_m1.jpg
-rw-r--r-- 1 lukas staff 533852 15 Apr 18:17 1776266249644_m2.jpg
-rw-r--r-- 1 lukas staff 560142 15 Apr 18:17 1776266251631_m2.jpg
-rw-r--r-- 1 lukas staff 208278 15 Apr 18:17 1776266254529_m1.jpg
-rw-r--r-- 1 lukas staff 671156 15 Apr 18:17 1776266254554_m2.jpg
-rw-r--r-- 1 lukas staff 671725 15 Apr 18:17 1776266257375_m2.jpg
-rw-r--r-- 1 lukas staff 208252 15 Apr 18:17 1776266257388_m1.jpg
-rw-r--r-- 1 lukas staff 208266 15 Apr 18:17 1776266260730_m1.jpg
-rw-r--r-- 1 lukas staff 668299 15 Apr 18:17 1776266261140_m2.jpg
-rw-r--r-- 1 lukas staff 208309 15 Apr 18:17 1776266262574_m1.jpg
-rw-r--r-- 1 lukas staff 662509 15 Apr 18:17 1776266262882_m2.jpg
-rw-r--r-- 1 lukas staff 208131 15 Apr 18:17 1776266264475_m1.jpg
-rw-r--r-- 1 lukas staff 662810 15 Apr 18:17 1776266264869_m2.jpg
-rw-r--r-- 1 lukas staff 208191 15 Apr 18:17 1776266266343_m1.jpg
-rw-r--r-- 1 lukas staff 668093 15 Apr 18:17 1776266266919_m2.jpg
-rw-r--r-- 1 lukas staff 208163 15 Apr 18:17 1776266268978_m1.jpg
-rw-r--r-- 1 lukas staff 666086 15 Apr 18:17 1776266269305_m2.jpg
-rw-r--r-- 1 lukas staff 208277 15 Apr 18:17 1776266271029_m1.jpg
-rw-r--r-- 1 lukas staff 659339 15 Apr 18:17 1776266271383_m2.jpg
-rw-r--r-- 1 lukas staff 208198 15 Apr 18:17 1776266273464_m1.jpg
-rw-r--r-- 1 lukas staff 662828 15 Apr 18:17 1776266273971_m2.jpg
-rw-r--r-- 1 lukas staff 208062 15 Apr 18:17 1776266275425_m1.jpg
-rw-r--r-- 1 lukas staff 661898 15 Apr 18:17 1776266275684_m2.jpg
-rw-r--r-- 1 lukas staff 208033 15 Apr 18:17 1776266277232_m1.jpg
-rw-r--r-- 1 lukas staff 658221 15 Apr 18:17 1776266277517_m2.jpg
-rw-r--r-- 1 lukas staff 208114 15 Apr 18:17 1776266279573_m1.jpg
-rw-r--r-- 1 lukas staff 602127 15 Apr 18:18 1776266280047_m2.jpg
-rw-r--r-- 1 lukas staff 208037 15 Apr 18:18 1776266281724_m1.jpg
-rw-r--r-- 1 lukas staff 596966 15 Apr 18:18 1776266282107_m2.jpg
-rw-r--r-- 1 lukas staff 208120 15 Apr 18:18 1776266283882_m1.jpg
-rw-r--r-- 1 lukas staff 605123 15 Apr 18:18 1776266284188_m2.jpg
-rw-r--r-- 1 lukas staff 208244 15 Apr 18:18 1776266285945_m1.jpg
-rw-r--r-- 1 lukas staff 619753 15 Apr 18:18 1776266286471_m2.jpg
-rw-r--r-- 1 lukas staff 208208 15 Apr 18:18 1776266288028_m1.jpg
-rw-r--r-- 1 lukas staff 642228 15 Apr 18:18 1776266288334_m2.jpg
-rw-r--r-- 1 lukas staff 208132 15 Apr 18:18 1776266289850_m1.jpg
-rw-r--r-- 1 lukas staff 596740 15 Apr 18:18 1776266290179_m2.jpg
-rw-r--r-- 1 lukas staff 208063 15 Apr 18:18 1776266291759_m1.jpg
-rw-r--r-- 1 lukas staff 519390 15 Apr 18:18 1776266292102_m2.jpg
-rw-r--r-- 1 lukas staff 208064 15 Apr 18:18 1776266293780_m1.jpg
-rw-r--r-- 1 lukas staff 570229 15 Apr 18:18 1776266294157_m2.jpg
-rw-r--r-- 1 lukas staff 208572 15 Apr 18:18 1776266296164_m1.jpg
-rw-r--r-- 1 lukas staff 627388 15 Apr 18:18 1776266296515_m2.jpg
-rw-r--r-- 1 lukas staff 208569 15 Apr 18:18 1776266298335_m1.jpg
-rw-r--r-- 1 lukas staff 634945 15 Apr 18:18 1776266298705_m2.jpg
-rw-r--r-- 1 lukas staff 208639 15 Apr 18:18 1776266300354_m1.jpg
-rw-r--r-- 1 lukas staff 657628 15 Apr 18:18 1776266300766_m2.jpg
-rw-r--r-- 1 lukas staff 657244 15 Apr 18:18 1776266302789_m2.jpg
-rw-r--r-- 1 lukas staff 208494 15 Apr 18:18 1776266303032_m1.jpg
-rw-r--r-- 1 lukas staff 644942 15 Apr 18:18 1776266305193_m2.jpg
-rw-r--r-- 1 lukas staff 208528 15 Apr 18:18 1776266305226_m1.jpg
-rw-r--r-- 1 lukas staff 659418 15 Apr 18:18 1776266307482_m2.jpg
-rw-r--r-- 1 lukas staff 208235 15 Apr 18:18 1776266307995_m1.jpg
-rw-r--r-- 1 lukas staff 653477 15 Apr 18:18 1776266310362_m2.jpg
-rw-r--r-- 1 lukas staff 650556 15 Apr 18:18 1776266311519_m2.jpg
-rw-r--r-- 1 lukas staff 208178 15 Apr 18:18 1776266311576_m1.jpg
-rw-r--r-- 1 lukas staff 639707 15 Apr 18:18 1776266314332_m2.jpg
-rw-r--r-- 1 lukas staff 208212 15 Apr 18:18 1776266314402_m1.jpg
-rw-r--r-- 1 lukas staff 627225 15 Apr 18:18 1776266316656_m2.jpg
-rw-r--r-- 1 lukas staff 640482 15 Apr 18:18 1776266317791_m2.jpg
-rw-r--r-- 1 lukas staff 208927 15 Apr 18:18 1776266317875_m1.jpg
-rw-r--r-- 1 lukas staff 655721 15 Apr 18:18 1776266320034_m2.jpg
-rw-r--r-- 1 lukas staff 653914 15 Apr 18:18 1776266321149_m2.jpg
-rw-r--r-- 1 lukas staff 208973 15 Apr 18:18 1776266322248_m1.jpg
-rw-r--r-- 1 lukas staff 651290 15 Apr 18:18 1776266322405_m2.jpg
-rw-r--r-- 1 lukas staff 208883 15 Apr 18:18 1776266324678_m1.jpg
-rw-r--r-- 1 lukas staff 649799 15 Apr 18:18 1776266324696_m2.jpg
-rw-r--r-- 1 lukas staff 208944 15 Apr 18:18 1776266327023_m1.jpg
-rw-r--r-- 1 lukas staff 640016 15 Apr 18:18 1776266327481_m2.jpg
-rw-r--r-- 1 lukas staff 648723 15 Apr 18:18 1776266329400_m2.jpg
-rw-r--r-- 1 lukas staff 649676 15 Apr 18:18 1776266330593_m2.jpg
-rw-r--r-- 1 lukas staff 208128 15 Apr 18:18 1776266331799_m1.jpg
-rw-r--r-- 1 lukas staff 657268 15 Apr 18:18 1776266331870_m2.jpg
-rw-r--r-- 1 lukas staff 614701 15 Apr 18:18 1776266334838_m2.jpg
-rw-r--r-- 1 lukas staff 208599 15 Apr 18:18 1776266334866_m1.jpg
-rw-r--r-- 1 lukas staff 208720 15 Apr 18:18 1776266337075_m1.jpg
-rw-r--r-- 1 lukas staff 635012 15 Apr 18:18 1776266337384_m2.jpg
-rw-r--r-- 1 lukas staff 208649 15 Apr 18:18 1776266339499_m1.jpg
-rw-r--r-- 1 lukas staff 654410 15 Apr 18:19 1776266340051_m2.jpg
-rw-r--r-- 1 lukas staff 670162 15 Apr 18:19 1776266342278_m2.jpg
-rw-r--r-- 1 lukas staff 208679 15 Apr 18:19 1776266343422_m1.jpg
-rw-r--r-- 1 lukas staff 679486 15 Apr 18:19 1776266343480_m2.jpg
-rw-r--r-- 1 lukas staff 580457 15 Apr 18:19 1776266346149_m2.jpg
-rw-r--r-- 1 lukas staff 613073 15 Apr 18:19 1776266349191_m2.jpg
-rw-r--r-- 1 lukas staff 208605 15 Apr 18:19 1776266349504_m1.jpg
-rw-r--r-- 1 lukas staff 208530 15 Apr 18:19 1776266351872_m1.jpg
-rw-r--r-- 1 lukas staff 618382 15 Apr 18:19 1776266352314_m2.jpg
-rw-r--r-- 1 lukas staff 208156 15 Apr 18:19 1776266354320_m1.jpg
-rw-r--r-- 1 lukas staff 637916 15 Apr 18:19 1776266354736_m2.jpg
-rw-r--r-- 1 lukas staff 208104 15 Apr 18:19 1776266356503_m1.jpg
-rw-r--r-- 1 lukas staff 635941 15 Apr 18:19 1776266356846_m2.jpg
-rw-r--r-- 1 lukas staff 208119 15 Apr 18:19 1776266358528_m1.jpg
-rw-r--r-- 1 lukas staff 618746 15 Apr 18:19 1776266358951_m2.jpg
-rw-r--r-- 1 lukas staff 741230 15 Apr 18:19 1776266360933_m2.jpg
-rw-r--r-- 1 lukas staff 684325 15 Apr 18:19 1776266362281_m2.jpg
-rw-r--r-- 1 lukas staff 208646 15 Apr 18:19 1776266362913_m1.jpg
-rw-r--r-- 1 lukas staff 700483 15 Apr 18:19 1776266365163_m2.jpg
-rw-r--r-- 1 lukas staff 208877 15 Apr 18:19 1776266366139_m1.jpg
-rw-r--r-- 1 lukas staff 601181 15 Apr 18:19 1776266366639_m2.jpg
-rw-r--r-- 1 lukas staff 208909 15 Apr 18:19 1776266369139_m1.jpg
-rw-r--r-- 1 lukas staff 655095 15 Apr 18:19 1776266369139_m2.jpg
-rw-r--r-- 1 lukas staff 656950 15 Apr 18:19 1776266371906_m2.jpg
-rw-r--r-- 1 lukas staff 208873 15 Apr 18:19 1776266371909_m1.jpg
-rw-r--r-- 1 lukas staff 596595 15 Apr 18:19 1776266374350_m2.jpg
-rw-r--r-- 1 lukas staff 678600 15 Apr 18:19 1776266375785_m2.jpg
-rw-r--r-- 1 lukas staff 208146 15 Apr 18:19 1776266377145_m1.jpg
-rw-r--r-- 1 lukas staff 688844 15 Apr 18:19 1776266377145_m2.jpg
-rw-r--r-- 1 lukas staff 208870 15 Apr 18:19 1776266384365_m1.jpg
-rw-r--r-- 1 lukas staff 684366 15 Apr 18:19 1776266384403_m2.jpg
-rw-r--r-- 1 lukas staff 208252 15 Apr 18:19 1776266386353_m1.jpg
-rw-r--r-- 1 lukas staff 662242 15 Apr 18:19 1776266386874_m2.jpg
-rw-r--r-- 1 lukas staff 208227 15 Apr 18:19 1776266388905_m1.jpg
-rw-r--r-- 1 lukas staff 669929 15 Apr 18:19 1776266389162_m2.jpg
-rw-r--r-- 1 lukas staff 564108 15 Apr 18:19 1776266394415_m2.jpg
-rw-r--r-- 1 lukas staff 208254 15 Apr 18:19 1776266394669_m1.jpg
-rw-r--r-- 1 lukas staff 597473 15 Apr 18:19 1776266397429_m2.jpg
-rw-r--r-- 1 lukas staff 208197 15 Apr 18:19 1776266398122_m1.jpg
-rw-r--r-- 1 lukas staff 588253 15 Apr 18:19 1776266398654_m2.jpg
-rw-r--r-- 1 lukas staff 208263 15 Apr 18:20 1776266400169_m1.jpg
-rw-r--r-- 1 lukas staff 590676 15 Apr 18:20 1776266400800_m2.jpg
-rw-r--r-- 1 lukas staff 660135 15 Apr 18:20 1776266403120_m2.jpg
-rw-r--r-- 1 lukas staff 208198 15 Apr 18:20 1776266404315_m1.jpg
-rw-r--r-- 1 lukas staff 663732 15 Apr 18:20 1776266404344_m2.jpg
-rw-r--r-- 1 lukas staff 676367 15 Apr 18:20 1776266410701_m2.jpg
-rw-r--r-- 1 lukas staff 208239 15 Apr 18:20 1776266410716_m1.jpg
-rw-r--r-- 1 lukas staff 208866 15 Apr 18:20 1776266423385_m1.jpg
-rw-r--r-- 1 lukas staff 690762 15 Apr 18:20 1776266423399_m2.jpg
-rw-r--r-- 1 lukas staff 672619 15 Apr 18:20 1776266426942_m2.jpg
-rw-r--r-- 1 lukas staff 208889 15 Apr 18:20 1776266426971_m1.jpg
-rw-r--r-- 1 lukas staff 208218 15 Apr 18:20 1776266430808_m1.jpg
-rw-r--r-- 1 lukas staff 671881 15 Apr 18:20 1776266430808_m2.jpg
-rw-r--r-- 1 lukas staff 208183 15 Apr 18:20 1776266433623_m1.jpg
-rw-r--r-- 1 lukas staff 674761 15 Apr 18:20 1776266433670_m2.jpg
-rw-r--r-- 1 lukas staff 208217 15 Apr 18:20 1776266436240_m1.jpg
-rw-r--r-- 1 lukas staff 670159 15 Apr 18:20 1776266436263_m2.jpg
-rw-r--r-- 1 lukas staff 208182 15 Apr 18:20 1776266438629_m1.jpg
-rw-r--r-- 1 lukas staff 668057 15 Apr 18:20 1776266438638_m2.jpg
-rw-r--r-- 1 lukas staff 208906 15 Apr 18:20 1776266442252_m1.jpg
-rw-r--r-- 1 lukas staff 672509 15 Apr 18:20 1776266442293_m2.jpg
-rw-r--r-- 1 lukas staff 208955 15 Apr 18:20 1776266444286_m1.jpg
-rw-r--r-- 1 lukas staff 669667 15 Apr 18:20 1776266444713_m2.jpg
-rw-r--r-- 1 lukas staff 711375 15 Apr 18:20 1776266446659_m2.jpg
-rw-r--r-- 1 lukas staff 208164 15 Apr 18:20 1776266447514_m1.jpg
-rw-r--r-- 1 lukas staff 739201 15 Apr 18:20 1776266448562_m2.jpg
-rw-r--r-- 1 lukas staff 208600 15 Apr 18:20 1776266450066_m1.jpg
-rw-r--r-- 1 lukas staff 735015 15 Apr 18:20 1776266450077_m2.jpg
-rw-r--r-- 1 lukas staff 602085 15 Apr 18:20 1776266452815_m2.jpg
-rw-r--r-- 1 lukas staff 554910 15 Apr 18:20 1776266455812_m2.jpg
-rw-r--r-- 1 lukas staff 208706 15 Apr 18:20 1776266457074_m1.jpg
-rw-r--r-- 1 lukas staff 668265 15 Apr 18:20 1776266457218_m2.jpg
-rw-r--r-- 1 lukas staff 627127 15 Apr 18:21 1776266462398_m2.jpg
-rw-r--r-- 1 lukas staff 651254 15 Apr 18:21 1776266464654_m2.jpg
-rw-r--r-- 1 lukas staff 208782 15 Apr 18:21 1776266464655_m1.jpg
-rw-r--r-- 1 lukas staff 208337 15 Apr 18:21 1776266467161_m1.jpg
-rw-r--r-- 1 lukas staff 675477 15 Apr 18:21 1776266467769_m2.jpg
-rw-r--r-- 1 lukas staff 208352 15 Apr 18:21 1776266470056_m1.jpg
-rw-r--r-- 1 lukas staff 646287 15 Apr 18:21 1776266470426_m2.jpg
-rw-r--r-- 1 lukas staff 208441 15 Apr 18:21 1776266472480_m1.jpg
-rw-r--r-- 1 lukas staff 670331 15 Apr 18:21 1776266473095_m2.jpg
-rw-r--r-- 1 lukas staff 208409 15 Apr 18:21 1776266474797_m1.jpg
-rw-r--r-- 1 lukas staff 658783 15 Apr 18:21 1776266475129_m2.jpg
-rw-r--r-- 1 lukas staff 208807 15 Apr 18:21 1776266476839_m1.jpg
-rw-r--r-- 1 lukas staff 658240 15 Apr 18:21 1776266477168_m2.jpg
-rw-r--r-- 1 lukas staff 208844 15 Apr 18:21 1776266478922_m1.jpg
-rw-r--r-- 1 lukas staff 666996 15 Apr 18:21 1776266479271_m2.jpg
-rw-r--r-- 1 lukas staff 699189 15 Apr 18:21 1776266481646_m2.jpg
-rw-r--r-- 1 lukas staff 708975 15 Apr 18:21 1776266482907_m2.jpg
-rw-r--r-- 1 lukas staff 682317 15 Apr 18:21 1776266487203_m2.jpg
-rw-r--r-- 1 lukas staff 209118 15 Apr 18:21 1776266489247_m1.jpg
-rw-r--r-- 1 lukas staff 687083 15 Apr 18:21 1776266489247_m2.jpg
-rw-r--r-- 1 lukas staff 209082 15 Apr 18:21 1776266491199_m1.jpg
-rw-r--r-- 1 lukas staff 676433 15 Apr 18:21 1776266492289_m2.jpg
-rw-r--r-- 1 lukas staff 209174 15 Apr 18:21 1776266493476_m1.jpg
-rw-r--r-- 1 lukas staff 668920 15 Apr 18:21 1776266493678_m2.jpg
-rw-r--r-- 1 lukas staff 208388 15 Apr 18:21 1776266497984_m1.jpg
-rw-r--r-- 1 lukas staff 652067 15 Apr 18:21 1776266497984_m2.jpg
-rw-r--r-- 1 lukas staff 208298 15 Apr 18:21 1776266501940_m1.jpg
-rw-r--r-- 1 lukas staff 632049 15 Apr 18:21 1776266501960_m2.jpg
-rw-r--r-- 1 lukas staff 208349 15 Apr 18:21 1776266503799_m1.jpg
-rw-r--r-- 1 lukas staff 643154 15 Apr 18:21 1776266504159_m2.jpg
-rw-r--r-- 1 lukas staff 634868 15 Apr 18:21 1776266507710_m2.jpg
-rw-r--r-- 1 lukas staff 208376 15 Apr 18:21 1776266507750_m1.jpg
-rw-r--r-- 1 lukas staff 208249 15 Apr 18:21 1776266509896_m1.jpg
-rw-r--r-- 1 lukas staff 659743 15 Apr 18:21 1776266510358_m2.jpg
-rw-r--r-- 1 lukas staff 675221 15 Apr 18:21 1776266512596_m2.jpg
-rw-r--r-- 1 lukas staff 699120 15 Apr 18:21 1776266513811_m2.jpg
-rw-r--r-- 1 lukas staff 208799 15 Apr 18:21 1776266513915_m1.jpg
-rw-r--r-- 1 lukas staff 661306 15 Apr 18:21 1776266517106_m2.jpg
-rw-r--r-- 1 lukas staff 208768 15 Apr 18:21 1776266519085_m1.jpg
-rw-r--r-- 1 lukas staff 654783 15 Apr 18:21 1776266519085_m2.jpg
-rw-r--r-- 1 lukas staff 657014 15 Apr 18:22 1776266521775_m2.jpg
-rw-r--r-- 1 lukas staff 208743 15 Apr 18:22 1776266521905_m1.jpg
-rw-r--r-- 1 lukas...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 208823 15 Apr 18:24 1776266649991_m1.jpg\n-rw-r--r-- 1 lukas staff 677743 15 Apr 18:24 1776266649991_m2.jpg\n-rw-r--r-- 1 lukas staff 285273 15 Apr 18:24 1776266655380_m2.jpg\n-rw-r--r-- 1 lukas staff 208338 15 Apr 18:24 1776266656348_m1.jpg\n-rw-r--r-- 1 lukas staff 299758 15 Apr 18:24 1776266657887_m2.jpg\n-rw-r--r-- 1 lukas staff 208905 15 Apr 18:24 1776266660014_m1.jpg\n-rw-r--r-- 1 lukas staff 505543 15 Apr 18:24 1776266660357_m2.jpg\n-rw-r--r-- 1 lukas staff 130773 15 Apr 18:24 1776266662583_m2.jpg\n-rw-r--r-- 1 lukas staff 208837 15 Apr 18:24 1776266662590_m1.jpg\n-rw-r--r-- 1 lukas staff 131262 15 Apr 18:24 1776266665030_m2.jpg\n-rw-r--r-- 1 lukas staff 208543 15 Apr 18:24 1776266665178_m1.jpg\n-rw-r--r-- 1 lukas staff 82600 15 Apr 18:24 1776266668094_m2.jpg\n-rw-r--r-- 1 lukas staff 99799 15 Apr 18:24 1776266671070_m2.jpg\n-rw-r--r-- 1 lukas staff 209265 15 Apr 18:24 1776266671742_m1.jpg\n-rw-r--r-- 1 lukas staff 69569 15 Apr 18:24 1776266672855_m2.jpg\n-rw-r--r-- 1 lukas staff 233878 15 Apr 18:24 1776266675463_m2.jpg\n-rw-r--r-- 1 lukas staff 233944 15 Apr 18:24 1776266676686_m2.jpg\n-rw-r--r-- 1 lukas staff 208529 15 Apr 18:24 1776266676718_m1.jpg\n-rw-r--r-- 1 lukas staff 208411 15 Apr 18:24 1776266678430_m1.jpg\n-rw-r--r-- 1 lukas staff 275989 15 Apr 18:24 1776266678431_m2.jpg\n-rw-r--r-- 1 lukas staff 258903 15 Apr 18:24 1776266679106_m2.jpg\n-rw-r--r-- 1 lukas staff 278951 15 Apr 18:24 1776266682164_m2.jpg\n-rw-r--r-- 1 lukas staff 208465 15 Apr 18:24 1776266687272_m1.jpg\n-rw-r--r-- 1 lukas staff 208398 15 Apr 18:24 1776266690323_m1.jpg\n-rw-r--r-- 1 lukas staff 273693 15 Apr 18:24 1776266691227_m2.jpg\n-rw-r--r-- 1 lukas staff 185943 15 Apr 18:24 1776266696382_m1.jpg\n-rw-r--r-- 1 lukas staff 271869 15 Apr 18:24 1776266697274_m2.jpg\n-rw-r--r-- 1 lukas staff 366699 15 Apr 18:25 1776266705465_m1.jpg\n-rw-r--r-- 1 lukas staff 186079 15 Apr 18:25 1776266708505_m1.jpg\n-rw-r--r-- 1 lukas staff 1292480 15 Apr 10:09 compact_monitor_1_1776236979346.mp4\n-rw-r--r-- 1 lukas staff 6304039 15 Apr 10:14 compact_monitor_1_1776237284692.mp4\n-rw-r--r-- 1 lukas staff 2514313 15 Apr 10:19 compact_monitor_1_1776237595554.mp4\n-rw-r--r-- 1 lukas staff 2821904 15 Apr 10:25 compact_monitor_1_1776237899635.mp4\n-rw-r--r-- 1 lukas staff 2785297 15 Apr 10:30 compact_monitor_1_1776238207393.mp4\n-rw-r--r-- 1 lukas staff 1639472 15 Apr 10:35 compact_monitor_1_1776238512537.mp4\n-rw-r--r-- 1 lukas staff 3207933 15 Apr 10:40 compact_monitor_1_1776238815528.mp4\n-rw-r--r-- 1 lukas staff 3594658 15 Apr 10:45 compact_monitor_1_1776239122381.mp4\n-rw-r--r-- 1 lukas staff 3671517 15 Apr 10:50 compact_monitor_1_1776239429225.mp4\n-rw-r--r-- 1 lukas staff 4031948 15 Apr 10:55 compact_monitor_1_1776239734998.mp4\n-rw-r--r-- 1 lukas staff 3529461 15 Apr 11:00 compact_monitor_1_1776240042925.mp4\n-rw-r--r-- 1 lukas staff 5234845 15 Apr 11:05 compact_monitor_1_1776240349311.mp4\n-rw-r--r-- 1 lukas staff 3323085 15 Apr 11:11 compact_monitor_1_1776240657823.mp4\n-rw-r--r-- 1 lukas staff 2204215 15 Apr 11:16 compact_monitor_1_1776240963306.mp4\n-rw-r--r-- 1 lukas staff 2387534 15 Apr 11:21 compact_monitor_1_1776241266776.mp4\n-rw-r--r-- 1 lukas staff 4921676 15 Apr 11:26 compact_monitor_1_1776241570939.mp4\n-rw-r--r-- 1 lukas staff 2135612 15 Apr 11:31 compact_monitor_1_1776241878162.mp4\n-rw-r--r-- 1 lukas staff 494014 15 Apr 11:36 compact_monitor_1_1776242182944.mp4\n-rw-r--r-- 1 lukas staff 1986658 15 Apr 11:41 compact_monitor_1_1776242488565.mp4\n-rw-r--r-- 1 lukas staff 1651327 15 Apr 11:46 compact_monitor_1_1776242792386.mp4\n-rw-r--r-- 1 lukas staff 190056 15 Apr 11:51 compact_monitor_1_1776243099454.mp4\n-rw-r--r-- 1 lukas staff 489195 15 Apr 11:56 compact_monitor_1_1776243401560.mp4\n-rw-r--r-- 1 lukas staff 637245 15 Apr 12:01 compact_monitor_1_1776243707339.mp4\n-rw-r--r-- 1 lukas staff 836102 15 Apr 12:06 compact_monitor_1_1776244016111.mp4\n-rw-r--r-- 1 lukas staff 2250311 15 Apr 12:12 compact_monitor_1_1776244325248.mp4\n-rw-r--r-- 1 lukas staff 4438961 15 Apr 12:17 compact_monitor_1_1776244633485.mp4\n-rw-r--r-- 1 lukas staff 2024811 15 Apr 12:22 compact_monitor_1_1776244939105.mp4\n-rw-r--r-- 1 lukas staff 1140502 15 Apr 12:27 compact_monitor_1_1776245242576.mp4\n-rw-r--r-- 1 lukas staff 818870 15 Apr 12:32 compact_monitor_1_1776245545145.mp4\n-rw-r--r-- 1 lukas staff 506104 15 Apr 12:37 compact_monitor_1_1776245850845.mp4\n-rw-r--r-- 1 lukas staff 506372 15 Apr 12:42 compact_monitor_1_1776246157330.mp4\n-rw-r--r-- 1 lukas staff 585365 15 Apr 12:47 compact_monitor_1_1776246461621.mp4\n-rw-r--r-- 1 lukas staff 1536187 15 Apr 12:52 compact_monitor_1_1776246766463.mp4\n-rw-r--r-- 1 lukas staff 2825443 15 Apr 12:57 compact_monitor_1_1776247072489.mp4\n-rw-r--r-- 1 lukas staff 3094796 15 Apr 13:03 compact_monitor_1_1776247379957.mp4\n-rw-r--r-- 1 lukas staff 396633 15 Apr 13:08 compact_monitor_1_1776247688246.mp4\n-rw-r--r-- 1 lukas staff 909684 15 Apr 13:13 compact_monitor_1_1776247993728.mp4\n-rw-r--r-- 1 lukas staff 1577484 15 Apr 13:18 compact_monitor_1_1776248301121.mp4\n-rw-r--r-- 1 lukas staff 1079237 15 Apr 13:23 compact_monitor_1_1776248607315.mp4\n-rw-r--r-- 1 lukas staff 1091368 15 Apr 13:28 compact_monitor_1_1776248924298.mp4\n-rw-r--r-- 1 lukas staff 925798 15 Apr 13:34 compact_monitor_1_1776249241863.mp4\n-rw-r--r-- 1 lukas staff 1024193 15 Apr 13:39 compact_monitor_1_1776249553464.mp4\n-rw-r--r-- 1 lukas staff 1965175 15 Apr 13:44 compact_monitor_1_1776249871482.mp4\n-rw-r--r-- 1 lukas staff 942071 15 Apr 13:49 compact_monitor_1_1776250182641.mp4\n-rw-r--r-- 1 lukas staff 1036861 15 Apr 13:55 compact_monitor_1_1776250503790.mp4\n-rw-r--r-- 1 lukas staff 1084939 15 Apr 14:00 compact_monitor_1_1776250829184.mp4\n-rw-r--r-- 1 lukas staff 1137305 15 Apr 14:05 compact_monitor_1_1776251148270.mp4\n-rw-r--r-- 1 lukas staff 1084917 15 Apr 14:13 compact_monitor_1_1776251623899.mp4\n-rw-r--r-- 1 lukas staff 472006 15 Apr 14:18 compact_monitor_1_1776251937854.mp4\n-rw-r--r-- 1 lukas staff 2195675 15 Apr 14:24 compact_monitor_1_1776252241210.mp4\n-rw-r--r-- 1 lukas staff 2126366 15 Apr 14:29 compact_monitor_1_1776252546881.mp4\n-rw-r--r-- 1 lukas staff 1223098 15 Apr 14:34 compact_monitor_1_1776252863758.mp4\n-rw-r--r-- 1 lukas staff 1554811 15 Apr 14:39 compact_monitor_1_1776253185709.mp4\n-rw-r--r-- 1 lukas staff 283980 15 Apr 14:39 compact_monitor_1_1776253191237.mp4\n-rw-r--r-- 1 lukas staff 1004738 15 Apr 14:45 compact_monitor_1_1776253502852.mp4\n-rw-r--r-- 1 lukas staff 1007213 15 Apr 14:50 compact_monitor_1_1776253806491.mp4\n-rw-r--r-- 1 lukas staff 1622820 15 Apr 14:55 compact_monitor_1_1776254109375.mp4\n-rw-r--r-- 1 lukas staff 1800819 15 Apr 15:00 compact_monitor_1_1776254415281.mp4\n-rw-r--r-- 1 lukas staff 1248853 15 Apr 15:05 compact_monitor_1_1776254720441.mp4\n-rw-r--r-- 1 lukas staff 1358099 15 Apr 15:10 compact_monitor_1_1776255026922.mp4\n-rw-r--r-- 1 lukas staff 1077547 15 Apr 15:15 compact_monitor_1_1776255334430.mp4\n-rw-r--r-- 1 lukas staff 1194727 15 Apr 15:20 compact_monitor_1_1776255638369.mp4\n-rw-r--r-- 1 lukas staff 1312132 15 Apr 15:25 compact_monitor_1_1776255944046.mp4\n-rw-r--r-- 1 lukas staff 2526518 15 Apr 15:30 compact_monitor_1_1776256247989.mp4\n-rw-r--r-- 1 lukas staff 2591568 15 Apr 15:35 compact_monitor_1_1776256553209.mp4\n-rw-r--r-- 1 lukas staff 347132 15 Apr 15:41 compact_monitor_1_1776256862331.mp4\n-rw-r--r-- 1 lukas staff 331422 15 Apr 15:46 compact_monitor_1_1776257183524.mp4\n-rw-r--r-- 1 lukas staff 1507338 15 Apr 15:51 compact_monitor_1_1776257499295.mp4\n-rw-r--r-- 1 lukas staff 1080123 15 Apr 15:57 compact_monitor_1_1776257818639.mp4\n-rw-r--r-- 1 lukas staff 1048617 15 Apr 16:02 compact_monitor_1_1776258139836.mp4\n-rw-r--r-- 1 lukas staff 1151460 15 Apr 16:07 compact_monitor_1_1776258462628.mp4\n-rw-r--r-- 1 lukas staff 1206649 15 Apr 16:13 compact_monitor_1_1776258784114.mp4\n-rw-r--r-- 1 lukas staff 1133984 15 Apr 16:18 compact_monitor_1_1776259107952.mp4\n-rw-r--r-- 1 lukas staff 1142984 15 Apr 16:23 compact_monitor_1_1776259433131.mp4\n-rw-r--r-- 1 lukas staff 1253153 15 Apr 16:29 compact_monitor_1_1776259757534.mp4\n-rw-r--r-- 1 lukas staff 998310 15 Apr 16:34 compact_monitor_1_1776260076664.mp4\n-rw-r--r-- 1 lukas staff 1065076 15 Apr 16:40 compact_monitor_1_1776260397335.mp4\n-rw-r--r-- 1 lukas staff 1099220 15 Apr 16:45 compact_monitor_1_1776260721850.mp4\n-rw-r--r-- 1 lukas staff 1154961 15 Apr 16:50 compact_monitor_1_1776261044836.mp4\n-rw-r--r-- 1 lukas staff 1065431 15 Apr 16:56 compact_monitor_1_1776261372103.mp4\n-rw-r--r-- 1 lukas staff 984542 15 Apr 17:01 compact_monitor_1_1776261696699.mp4\n-rw-r--r-- 1 lukas staff 451220 15 Apr 17:01 compact_monitor_1_1776261702497.mp4\n-rw-r--r-- 1 lukas staff 1211676 15 Apr 17:07 compact_monitor_1_1776262024768.mp4\n-rw-r--r-- 1 lukas staff 1161330 15 Apr 17:12 compact_monitor_1_1776262344982.mp4\n-rw-r--r-- 1 lukas staff 1052573 15 Apr 17:17 compact_monitor_1_1776262664755.mp4\n-rw-r--r-- 1 lukas staff 418716 15 Apr 17:17 compact_monitor_1_1776262670708.mp4\n-rw-r--r-- 1 lukas staff 1682982 15 Apr 17:23 compact_monitor_1_1776262992301.mp4\n-rw-r--r-- 1 lukas staff 1073481 15 Apr 17:28 compact_monitor_1_1776263309511.mp4\n-rw-r--r-- 1 lukas staff 1192672 15 Apr 17:34 compact_monitor_1_1776263636829.mp4\n-rw-r--r-- 1 lukas staff 383279 15 Apr 17:34 compact_monitor_1_1776263642876.mp4\n-rw-r--r-- 1 lukas staff 1357937 15 Apr 17:39 compact_monitor_1_1776263965549.mp4\n-rw-r--r-- 1 lukas staff 1057912 15 Apr 17:44 compact_monitor_1_1776264293030.mp4\n-rw-r--r-- 1 lukas staff 1055882 15 Apr 17:50 compact_monitor_1_1776264619470.mp4\n-rw-r--r-- 1 lukas staff 1173057 15 Apr 17:55 compact_monitor_1_1776264946265.mp4\n-rw-r--r-- 1 lukas staff 1162002 15 Apr 18:01 compact_monitor_1_1776265273041.mp4\n-rw-r--r-- 1 lukas staff 410666 15 Apr 18:01 compact_monitor_1_1776265279242.mp4\n-rw-r--r-- 1 lukas staff 1213530 15 Apr 18:06 compact_monitor_1_1776265602616.mp4\n-rw-r--r-- 1 lukas staff 1210935 15 Apr 18:12 compact_monitor_1_1776265929948.mp4\n-rw-r--r-- 1 lukas staff 355364 15 Apr 18:12 compact_monitor_1_1776265935884.mp4\n-rw-r--r-- 1 lukas staff 985021 15 Apr 18:17 compact_monitor_1_1776266259356.mp4\n-rw-r--r-- 1 lukas staff 448474 15 Apr 18:17 compact_monitor_1_1776266265353.mp4\n-rw-r--r-- 1 lukas staff 1007624 15 Apr 18:23 compact_monitor_1_1776266587803.mp4\n-rw-r--r-- 1 lukas staff 417702 15 Apr 18:23 compact_monitor_1_1776266593821.mp4\n-rw-r--r-- 1 lukas staff 3815275 15 Apr 10:09 compact_monitor_2_1776236981488.mp4\n-rw-r--r-- 1 lukas staff 3854792 15 Apr 10:14 compact_monitor_2_1776237291726.mp4\n-rw-r--r-- 1 lukas staff 367131 15 Apr 10:19 compact_monitor_2_1776237598300.mp4\n-rw-r--r-- 1 lukas staff 3965510 15 Apr 10:25 compact_monitor_2_1776237902921.mp4\n-rw-r--r-- 1 lukas staff 468839 15 Apr 10:30 compact_monitor_2_1776238211071.mp4\n-rw-r--r-- 1 lukas staff 395077 15 Apr 10:35 compact_monitor_2_1776238514343.mp4\n-rw-r--r-- 1 lukas staff 1309545 15 Apr 10:40 compact_monitor_2_1776238819191.mp4\n-rw-r--r-- 1 lukas staff 2579871 15 Apr 10:45 compact_monitor_2_1776239125548.mp4\n-rw-r--r-- 1 lukas staff 2261244 15 Apr 10:50 compact_monitor_2_1776239432484.mp4\n-rw-r--r-- 1 lukas staff 1614099 15 Apr 10:55 compact_monitor_2_1776239738314.mp4\n-rw-r--r-- 1 lukas staff 1396501 15 Apr 11:00 compact_monitor_2_1776240046668.mp4\n-rw-r--r-- 1 lukas staff 2608327 15 Apr 11:05 compact_monitor_2_1776240354465.mp4\n-rw-r--r-- 1 lukas staff 1343284 15 Apr 11:11 compact_monitor_2_1776240661129.mp4\n-rw-r--r-- 1 lukas staff 104083 15 Apr 11:16 compact_monitor_2_1776240965780.mp4\n-rw-r--r-- 1 lukas staff 1696225 15 Apr 11:21 compact_monitor_2_1776241269257.mp4\n-rw-r--r-- 1 lukas staff 3038037 15 Apr 11:26 compact_monitor_2_1776241574093.mp4\n-rw-r--r-- 1 lukas staff 2308673 15 Apr 11:31 compact_monitor_2_1776241879955.mp4\n-rw-r--r-- 1 lukas staff 3684492 15 Apr 11:36 compact_monitor_2_1776242185232.mp4\n-rw-r--r-- 1 lukas staff 1318134 15 Apr 11:41 compact_monitor_2_1776242490310.mp4\n-rw-r--r-- 1 lukas staff 2429835 15 Apr 11:46 compact_monitor_2_1776242794849.mp4\n-rw-r--r-- 1 lukas staff 760204 15 Apr 11:51 compact_monitor_2_1776243100430.mp4\n-rw-r--r-- 1 lukas staff 2563357 15 Apr 11:56 compact_monitor_2_1776243402772.mp4\n-rw-r--r-- 1 lukas staff 2270439 15 Apr 12:01 compact_monitor_2_1776243709288.mp4\n-rw-r--r-- 1 lukas staff 1591957 15 Apr 12:07 compact_monitor_2_1776244019480.mp4\n-rw-r--r-- 1 lukas staff 1448741 15 Apr 12:12 compact_monitor_2_1776244328555.mp4\n-rw-r--r-- 1 lukas staff 3297885 15 Apr 12:17 compact_monitor_2_1776244636345.mp4\n-rw-r--r-- 1 lukas staff 1088455 15 Apr 12:22 compact_monitor_2_1776244941048.mp4\n-rw-r--r-- 1 lukas staff 398901 15 Apr 12:27 compact_monitor_2_1776245243901.mp4\n-rw-r--r-- 1 lukas staff 1511792 15 Apr 12:32 compact_monitor_2_1776245547006.mp4\n-rw-r--r-- 1 lukas staff 1331771 15 Apr 12:37 compact_monitor_2_1776245852471.mp4\n-rw-r--r-- 1 lukas staff 923996 15 Apr 12:42 compact_monitor_2_1776246158613.mp4\n-rw-r--r-- 1 lukas staff 2568982 15 Apr 12:47 compact_monitor_2_1776246463035.mp4\n-rw-r--r-- 1 lukas staff 3313949 15 Apr 12:52 compact_monitor_2_1776246768685.mp4\n-rw-r--r-- 1 lukas staff 4771645 15 Apr 12:57 compact_monitor_2_1776247076079.mp4\n-rw-r--r-- 1 lukas staff 6586185 15 Apr 13:03 compact_monitor_2_1776247382530.mp4\n-rw-r--r-- 1 lukas staff 2358604 15 Apr 13:08 compact_monitor_2_1776247690007.mp4\n-rw-r--r-- 1 lukas staff 2980294 15 Apr 13:13 compact_monitor_2_1776247996783.mp4\n-rw-r--r-- 1 lukas staff 3036356 15 Apr 13:18 compact_monitor_2_1776248303327.mp4\n-rw-r--r-- 1 lukas staff 13739308 15 Apr 13:23 compact_monitor_2_1776248612102.mp4\n-rw-r--r-- 1 lukas staff 1792715 15 Apr 13:23 compact_monitor_2_1776248622198.mp4\n-rw-r--r-- 1 lukas staff 19438020 15 Apr 13:28 compact_monitor_2_1776248929123.mp4\n-rw-r--r-- 1 lukas staff 1542891 15 Apr 13:29 compact_monitor_2_1776248939710.mp4\n-rw-r--r-- 1 lukas staff 18764167 15 Apr 13:34 compact_monitor_2_1776249244616.mp4\n-rw-r--r-- 1 lukas staff 29428799 15 Apr 13:39 compact_monitor_2_1776249557895.mp4\n-rw-r--r-- 1 lukas staff 12512925 15 Apr 13:44 compact_monitor_2_1776249875231.mp4\n-rw-r--r-- 1 lukas staff 30936872 15 Apr 13:50 compact_monitor_2_1776250186990.mp4\n-rw-r--r-- 1 lukas staff 2793009 15 Apr 13:50 compact_monitor_2_1776250201560.mp4\n-rw-r--r-- 1 lukas staff 33052595 15 Apr 13:55 compact_monitor_2_1776250510466.mp4\n-rw-r--r-- 1 lukas staff 8811443 15 Apr 13:55 compact_monitor_2_1776250525325.mp4\n-rw-r--r-- 1 lukas staff 36732130 15 Apr 14:00 compact_monitor_2_1776250833909.mp4\n-rw-r--r-- 1 lukas staff 808116 15 Apr 14:00 compact_monitor_2_1776250847678.mp4\n-rw-r--r-- 1 lukas staff 35963507 15 Apr 14:06 compact_monitor_2_1776251153283.mp4\n-rw-r--r-- 1 lukas staff 17255576 15 Apr 14:13 compact_monitor_2_1776251627877.mp4\n-rw-r--r-- 1 lukas staff 217409 15 Apr 14:18 compact_monitor_2_1776251938719.mp4\n-rw-r--r-- 1 lukas staff 2179896 15 Apr 14:24 compact_monitor_2_1776252243501.mp4\n-rw-r--r-- 1 lukas staff 24202787 15 Apr 14:29 compact_monitor_2_1776252550645.mp4\n-rw-r--r-- 1 lukas staff 40541441 15 Apr 14:34 compact_monitor_2_1776252869026.mp4\n-rw-r--r-- 1 lukas staff 1969819 15 Apr 14:34 compact_monitor_2_1776252884388.mp4\n-rw-r--r-- 1 lukas staff 26185693 15 Apr 14:40 compact_monitor_2_1776253191567.mp4\n-rw-r--r-- 1 lukas staff 2958445 15 Apr 14:45 compact_monitor_2_1776253504333.mp4\n-rw-r--r-- 1 lukas staff 1721625 15 Apr 14:50 compact_monitor_2_1776253807794.mp4\n-rw-r--r-- 1 lukas staff 5168799 15 Apr 14:55 compact_monitor_2_1776254111721.mp4\n-rw-r--r-- 1 lukas staff 1008125 15 Apr 15:00 compact_monitor_2_1776254418941.mp4\n-rw-r--r-- 1 lukas staff 2805751 15 Apr 15:05 compact_monitor_2_1776254723846.mp4\n-rw-r--r-- 1 lukas staff 4263256 15 Apr 15:10 compact_monitor_2_1776255030878.mp4\n-rw-r--r-- 1 lukas staff 1855151 15 Apr 15:15 compact_monitor_2_1776255336562.mp4\n-rw-r--r-- 1 lukas staff 1068172 15 Apr 15:20 compact_monitor_2_1776255640728.mp4\n-rw-r--r-- 1 lukas staff 393423 15 Apr 15:25 compact_monitor_2_1776255946991.mp4\n-rw-r--r-- 1 lukas staff 1066924 15 Apr 15:30 compact_monitor_2_1776256250851.mp4\n-rw-r--r-- 1 lukas staff 4522183 15 Apr 15:36 compact_monitor_2_1776256557162.mp4\n-rw-r--r-- 1 lukas staff 21285442 15 Apr 15:41 compact_monitor_2_1776256868069.mp4\n-rw-r--r-- 1 lukas staff 4799464 15 Apr 15:41 compact_monitor_2_1776256880438.mp4\n-rw-r--r-- 1 lukas staff 25082442 15 Apr 15:46 compact_monitor_2_1776257187591.mp4\n-rw-r--r-- 1 lukas staff 29377114 15 Apr 15:51 compact_monitor_2_1776257503657.mp4\n-rw-r--r-- 1 lukas staff 2577148 15 Apr 15:51 compact_monitor_2_1776257516759.mp4\n-rw-r--r-- 1 lukas staff 35197312 15 Apr 15:57 compact_monitor_2_1776257823244.mp4\n-rw-r--r-- 1 lukas staff 739380 15 Apr 15:57 compact_monitor_2_1776257838858.mp4\n-rw-r--r-- 1 lukas staff 39595503 15 Apr 16:02 compact_monitor_2_1776258144789.mp4\n-rw-r--r-- 1 lukas staff 2671413 15 Apr 16:02 compact_monitor_2_1776258160717.mp4\n-rw-r--r-- 1 lukas staff 33576004 15 Apr 16:08 compact_monitor_2_1776258467332.mp4\n-rw-r--r-- 1 lukas staff 3404945 15 Apr 16:08 compact_monitor_2_1776258481869.mp4\n-rw-r--r-- 1 lukas staff 36386887 15 Apr 16:13 compact_monitor_2_1776258789278.mp4\n-rw-r--r-- 1 lukas staff 2717076 15 Apr 16:13 compact_monitor_2_1776258804257.mp4\n-rw-r--r-- 1 lukas staff 38542946 15 Apr 16:18 compact_monitor_2_1776259112717.mp4\n-rw-r--r-- 1 lukas staff 6480087 15 Apr 16:18 compact_monitor_2_1776259128284.mp4\n-rw-r--r-- 1 lukas staff 39076466 15 Apr 16:24 compact_monitor_2_1776259438063.mp4\n-rw-r--r-- 1 lukas staff 4361748 15 Apr 16:24 compact_monitor_2_1776259453552.mp4\n-rw-r--r-- 1 lukas staff 30743109 15 Apr 16:29 compact_monitor_2_1776259762038.mp4\n-rw-r--r-- 1 lukas staff 35230072 15 Apr 16:34 compact_monitor_2_1776260081207.mp4\n-rw-r--r-- 1 lukas staff 44719930 15 Apr 16:40 compact_monitor_2_1776260402183.mp4\n-rw-r--r-- 1 lukas staff 40699319 15 Apr 16:45 compact_monitor_2_1776260727063.mp4\n-rw-r--r-- 1 lukas staff 40175062 15 Apr 16:51 compact_monitor_2_1776261051104.mp4\n-rw-r--r-- 1 lukas staff 10100456 15 Apr 16:51 compact_monitor_2_1776261066254.mp4\n-rw-r--r-- 1 lukas staff 40218171 15 Apr 16:56 compact_monitor_2_1776261377240.mp4\n-rw-r--r-- 1 lukas staff 10164441 15 Apr 16:56 compact_monitor_2_1776261392293.mp4\n-rw-r--r-- 1 lukas staff 39679757 15 Apr 17:01 compact_monitor_2_1776261703501.mp4\n-rw-r--r-- 1 lukas staff 16362780 15 Apr 17:02 compact_monitor_2_1776261718068.mp4\n-rw-r--r-- 1 lukas staff 35673196 15 Apr 17:07 compact_monitor_2_1776262030308.mp4\n-rw-r--r-- 1 lukas staff 418425 15 Apr 17:07 compact_monitor_2_1776262044183.mp4\n-rw-r--r-- 1 lukas staff 38695493 15 Apr 17:12 compact_monitor_2_1776262350156.mp4\n-rw-r--r-- 1 lukas staff 41039121 15 Apr 17:18 compact_monitor_2_1776262671510.mp4\n-rw-r--r-- 1 lukas staff 14440675 15 Apr 17:18 compact_monitor_2_1776262686451.mp4\n-rw-r--r-- 1 lukas staff 29155784 15 Apr 17:23 compact_monitor_2_1776262997519.mp4\n-rw-r--r-- 1 lukas staff 38013561 15 Apr 17:28 compact_monitor_2_1776263315513.mp4\n-rw-r--r-- 1 lukas staff 13728546 15 Apr 17:28 compact_monitor_2_1776263330175.mp4\n-rw-r--r-- 1 lukas staff 42282890 15 Apr 17:34 compact_monitor_2_1776263643561.mp4\n-rw-r--r-- 1 lukas staff 15975636 15 Apr 17:34 compact_monitor_2_1776263659153.mp4\n-rw-r--r-- 1 lukas staff 42361074 15 Apr 17:39 compact_monitor_2_1776263971167.mp4\n-rw-r--r-- 1 lukas staff 12206045 15 Apr 17:39 compact_monitor_2_1776263987012.mp4\n-rw-r--r-- 1 lukas staff 46367818 15 Apr 17:45 compact_monitor_2_1776264298000.mp4\n-rw-r--r-- 1 lukas staff 8981811 15 Apr 17:45 compact_monitor_2_1776264315186.mp4\n-rw-r--r-- 1 lukas staff 39268566 15 Apr 17:50 compact_monitor_2_1776264625122.mp4\n-rw-r--r-- 1 lukas staff 14427002 15 Apr 17:50 compact_monitor_2_1776264640284.mp4\n-rw-r--r-- 1 lukas staff 39524622 15 Apr 17:56 compact_monitor_2_1776264952043.mp4\n-rw-r--r-- 1 lukas staff 12413344 15 Apr 17:56 compact_monitor_2_1776264966984.mp4\n-rw-r--r-- 1 lukas staff 37530622 15 Apr 18:01 compact_monitor_2_1776265280164.mp4\n-rw-r--r-- 1 lukas staff 16392257 15 Apr 18:01 compact_monitor_2_1776265294548.mp4\n-rw-r--r-- 1 lukas staff 43552334 15 Apr 18:07 compact_monitor_2_1776265608065.mp4\n-rw-r--r-- 1 lukas staff 6335856 15 Apr 18:07 compact_monitor_2_1776265624847.mp4\n-rw-r--r-- 1 lukas staff 40102732 15 Apr 18:12 compact_monitor_2_1776265936487.mp4\n-rw-r--r-- 1 lukas staff 10852075 15 Apr 18:12 compact_monitor_2_1776265950996.mp4\n-rw-r--r-- 1 lukas staff 33010772 15 Apr 18:17 compact_monitor_2_1776266266304.mp4\n-rw-r--r-- 1 lukas staff 12302090 15 Apr 18:18 compact_monitor_2_1776266279297.mp4\n-rw-r--r-- 1 lukas staff 37997133 15 Apr 18:23 compact_monitor_2_1776266594590.mp4\n-rw-r--r-- 1 lukas staff 13660744 15 Apr 18:23 compact_monitor_2_1776266608276.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-15 $ ll\ntotal 4476272\ndrwxr-xr-x 740 lukas staff 23680 15 Apr 18:38 .\ndrwxr-xr-x 9 lukas staff 288 15 Apr 09:58 ..\n-rw-r--r-- 1 lukas staff 669036 15 Apr 18:13 1776265985239_m2.jpg\n-rw-r--r-- 1 lukas staff 203719 15 Apr 18:13 1776265985279_m1.jpg\n-rw-r--r-- 1 lukas staff 203612 15 Apr 18:13 1776265987070_m1.jpg\n-rw-r--r-- 1 lukas staff 674275 15 Apr 18:13 1776265987771_m2.jpg\n-rw-r--r-- 1 lukas staff 203511 15 Apr 18:13 1776265989538_m1.jpg\n-rw-r--r-- 1 lukas staff 667384 15 Apr 18:13 1776265989967_m2.jpg\n-rw-r--r-- 1 lukas staff 203666 15 Apr 18:13 1776265991616_m1.jpg\n-rw-r--r-- 1 lukas staff 669140 15 Apr 18:13 1776265992196_m2.jpg\n-rw-r--r-- 1 lukas staff 203595 15 Apr 18:13 1776265993913_m1.jpg\n-rw-r--r-- 1 lukas staff 680910 15 Apr 18:13 1776265994505_m2.jpg\n-rw-r--r-- 1 lukas staff 203581 15 Apr 18:13 1776265996130_m1.jpg\n-rw-r--r-- 1 lukas staff 670428 15 Apr 18:13 1776265996652_m2.jpg\n-rw-r--r-- 1 lukas staff 203708 15 Apr 18:13 1776265998298_m1.jpg\n-rw-r--r-- 1 lukas staff 659876 15 Apr 18:13 1776265998619_m2.jpg\n-rw-r--r-- 1 lukas staff 203790 15 Apr 18:13 1776266000317_m1.jpg\n-rw-r--r-- 1 lukas staff 675595 15 Apr 18:13 1776266000927_m2.jpg\n-rw-r--r-- 1 lukas staff 203772 15 Apr 18:13 1776266002837_m1.jpg\n-rw-r--r-- 1 lukas staff 681185 15 Apr 18:13 1776266003295_m2.jpg\n-rw-r--r-- 1 lukas staff 203737 15 Apr 18:13 1776266004906_m1.jpg\n-rw-r--r-- 1 lukas staff 674774 15 Apr 18:13 1776266005279_m2.jpg\n-rw-r--r-- 1 lukas staff 203710 15 Apr 18:13 1776266007045_m1.jpg\n-rw-r--r-- 1 lukas staff 672301 15 Apr 18:13 1776266007562_m2.jpg\n-rw-r--r-- 1 lukas staff 203778 15 Apr 18:13 1776266009409_m1.jpg\n-rw-r--r-- 1 lukas staff 647795 15 Apr 18:13 1776266009873_m2.jpg\n-rw-r--r-- 1 lukas staff 203773 15 Apr 18:13 1776266011796_m1.jpg\n-rw-r--r-- 1 lukas staff 621588 15 Apr 18:13 1776266012145_m2.jpg\n-rw-r--r-- 1 lukas staff 203797 15 Apr 18:13 1776266013610_m1.jpg\n-rw-r--r-- 1 lukas staff 557210 15 Apr 18:13 1776266013959_m2.jpg\n-rw-r--r-- 1 lukas staff 203799 15 Apr 18:13 1776266015437_m1.jpg\n-rw-r--r-- 1 lukas staff 576074 15 Apr 18:13 1776266015791_m2.jpg\n-rw-r--r-- 1 lukas staff 203846 15 Apr 18:13 1776266017399_m1.jpg\n-rw-r--r-- 1 lukas staff 592254 15 Apr 18:13 1776266017945_m2.jpg\n-rw-r--r-- 1 lukas staff 203767 15 Apr 18:13 1776266019677_m1.jpg\n-rw-r--r-- 1 lukas staff 554944 15 Apr 18:13 1776266020127_m2.jpg\n-rw-r--r-- 1 lukas staff 203706 15 Apr 18:13 1776266022131_m1.jpg\n-rw-r--r-- 1 lukas staff 584193 15 Apr 18:13 1776266022505_m2.jpg\n-rw-r--r-- 1 lukas staff 203718 15 Apr 18:13 1776266024358_m1.jpg\n-rw-r--r-- 1 lukas staff 586235 15 Apr 18:13 1776266024952_m2.jpg\n-rw-r--r-- 1 lukas staff 203609 15 Apr 18:13 1776266026730_m1.jpg\n-rw-r--r-- 1 lukas staff 582376 15 Apr 18:13 1776266027279_m2.jpg\n-rw-r--r-- 1 lukas staff 203696 15 Apr 18:13 1776266028710_m1.jpg\n-rw-r--r-- 1 lukas staff 568913 15 Apr 18:13 1776266029111_m2.jpg\n-rw-r--r-- 1 lukas staff 203648 15 Apr 18:13 1776266030751_m1.jpg\n-rw-r--r-- 1 lukas staff 431509 15 Apr 18:13 1776266031143_m2.jpg\n-rw-r--r-- 1 lukas staff 468169 15 Apr 18:13 1776266033149_m2.jpg\n-rw-r--r-- 1 lukas staff 203714 15 Apr 18:13 1776266033552_m1.jpg\n-rw-r--r-- 1 lukas staff 203753 15 Apr 18:13 1776266035546_m1.jpg\n-rw-r--r-- 1 lukas staff 477414 15 Apr 18:13 1776266036047_m2.jpg\n-rw-r--r-- 1 lukas staff 203704 15 Apr 18:13 1776266037947_m1.jpg\n-rw-r--r-- 1 lukas staff 476980 15 Apr 18:13 1776266038370_m2.jpg\n-rw-r--r-- 1 lukas staff 203686 15 Apr 18:14 1776266040183_m1.jpg\n-rw-r--r-- 1 lukas staff 485156 15 Apr 18:14 1776266040577_m2.jpg\n-rw-r--r-- 1 lukas staff 486141 15 Apr 18:14 1776266042413_m2.jpg\n-rw-r--r-- 1 lukas staff 490784 15 Apr 18:14 1776266043473_m2.jpg\n-rw-r--r-- 1 lukas staff 556817 15 Apr 18:14 1776266044640_m2.jpg\n-rw-r--r-- 1 lukas staff 588963 15 Apr 18:14 1776266045757_m2.jpg\n-rw-r--r-- 1 lukas staff 591407 15 Apr 18:14 1776266046926_m2.jpg\n-rw-r--r-- 1 lukas staff 204286 15 Apr 18:14 1776266048022_m1.jpg\n-rw-r--r-- 1 lukas staff 592997 15 Apr 18:14 1776266048341_m2.jpg\n-rw-r--r-- 1 lukas staff 204367 15 Apr 18:14 1776266050092_m1.jpg\n-rw-r--r-- 1 lukas staff 595109 15 Apr 18:14 1776266050576_m2.jpg\n-rw-r--r-- 1 lukas staff 203877 15 Apr 18:14 1776266052271_m1.jpg\n-rw-r--r-- 1 lukas staff 617722 15 Apr 18:14 1776266052711_m2.jpg\n-rw-r--r-- 1 lukas staff 566247 15 Apr 18:14 1776266054920_m2.jpg\n-rw-r--r-- 1 lukas staff 587163 15 Apr 18:14 1776266056075_m2.jpg\n-rw-r--r-- 1 lukas staff 203881 15 Apr 18:14 1776266056756_m1.jpg\n-rw-r--r-- 1 lukas staff 590009 15 Apr 18:14 1776266057195_m2.jpg\n-rw-r--r-- 1 lukas staff 559463 15 Apr 18:14 1776266059115_m2.jpg\n-rw-r--r-- 1 lukas staff 203874 15 Apr 18:14 1776266060554_m1.jpg\n-rw-r--r-- 1 lukas staff 596850 15 Apr 18:14 1776266060554_m2.jpg\n-rw-r--r-- 1 lukas staff 203900 15 Apr 18:14 1776266062752_m1.jpg\n-rw-r--r-- 1 lukas staff 441354 15 Apr 18:14 1776266066711_m2.jpg\n-rw-r--r-- 1 lukas staff 55745 15 Apr 18:14 1776266068595_m1.jpg\n-rw-r--r-- 1 lukas staff 446599 15 Apr 18:14 1776266069433_m2.jpg\n-rw-r--r-- 1 lukas staff 446609 15 Apr 18:14 1776266070172_m2.jpg\n-rw-r--r-- 1 lukas staff 94532 15 Apr 18:14 1776266070176_m1.jpg\n-rw-r--r-- 1 lukas staff 88474 15 Apr 18:14 1776266071656_m1.jpg\n-rw-r--r-- 1 lukas staff 535766 15 Apr 18:14 1776266072584_m2.jpg\n-rw-r--r-- 1 lukas staff 92870 15 Apr 18:14 1776266074845_m1.jpg\n-rw-r--r-- 1 lukas staff 88052 15 Apr 18:14 1776266077692_m1.jpg\n-rw-r--r-- 1 lukas staff 88179 15 Apr 18:14 1776266082536_m1.jpg\n-rw-r--r-- 1 lukas staff 533426 15 Apr 18:14 1776266082536_m2.jpg\n-rw-r--r-- 1 lukas staff 88175 15 Apr 18:14 1776266084440_m1.jpg\n-rw-r--r-- 1 lukas staff 500743 15 Apr 18:14 1776266084440_m2.jpg\n-rw-r--r-- 1 lukas staff 502910 15 Apr 18:14 1776266085860_m2.jpg\n-rw-r--r-- 1 lukas staff 88161 15 Apr 18:14 1776266087714_m1.jpg\n-rw-r--r-- 1 lukas staff 562872 15 Apr 18:14 1776266087714_m2.jpg\n-rw-r--r-- 1 lukas staff 507401 15 Apr 18:14 1776266091668_m2.jpg\n-rw-r--r-- 1 lukas staff 88198 15 Apr 18:14 1776266091678_m1.jpg\n-rw-r--r-- 1 lukas staff 556350 15 Apr 18:14 1776266096275_m2.jpg\n-rw-r--r-- 1 lukas staff 574870 15 Apr 18:14 1776266099219_m2.jpg\n-rw-r--r-- 1 lukas staff 88436 15 Apr 18:15 1776266104959_m1.jpg\n-rw-r--r-- 1 lukas staff 254145 15 Apr 18:15 1776266105237_m2.jpg\n-rw-r--r-- 1 lukas staff 88535 15 Apr 18:15 1776266106590_m1.jpg\n-rw-r--r-- 1 lukas staff 276093 15 Apr 18:15 1776266106590_m2.jpg\n-rw-r--r-- 1 lukas staff 95178 15 Apr 18:15 1776266107364_m1.jpg\n-rw-r--r-- 1 lukas staff 272726 15 Apr 18:15 1776266107397_m2.jpg\n-rw-r--r-- 1 lukas staff 272729 15 Apr 18:15 1776266108410_m2.jpg\n-rw-r--r-- 1 lukas staff 95201 15 Apr 18:15 1776266108439_m1.jpg\n-rw-r--r-- 1 lukas staff 207648 15 Apr 18:15 1776266110874_m1.jpg\n-rw-r--r-- 1 lukas staff 272706 15 Apr 18:15 1776266111078_m2.jpg\n-rw-r--r-- 1 lukas staff 208459 15 Apr 18:15 1776266111821_m1.jpg\n-rw-r--r-- 1 lukas staff 212011 15 Apr 18:15 1776266113939_m1.jpg\n-rw-r--r-- 1 lukas staff 272780 15 Apr 18:15 1776266122951_m2.jpg\n-rw-r--r-- 1 lukas staff 211547 15 Apr 18:15 1776266122974_m1.jpg\n-rw-r--r-- 1 lukas staff 209162 15 Apr 18:15 1776266123875_m1.jpg\n-rw-r--r-- 1 lukas staff 205277 15 Apr 18:15 1776266125853_m1.jpg\n-rw-r--r-- 1 lukas staff 272667 15 Apr 18:15 1776266125853_m2.jpg\n-rw-r--r-- 1 lukas staff 272719 15 Apr 18:15 1776266127403_m2.jpg\n-rw-r--r-- 1 lukas staff 206802 15 Apr 18:15 1776266127410_m1.jpg\n-rw-r--r-- 1 lukas staff 213918 15 Apr 18:15 1776266130082_m1.jpg\n-rw-r--r-- 1 lukas staff 212411 15 Apr 18:15 1776266132673_m1.jpg\n-rw-r--r-- 1 lukas staff 272808 15 Apr 18:15 1776266132673_m2.jpg\n-rw-r--r-- 1 lukas staff 207894 15 Apr 18:15 1776266133340_m1.jpg\n-rw-r--r-- 1 lukas staff 555932 15 Apr 18:15 1776266134609_m2.jpg\n-rw-r--r-- 1 lukas staff 207911 15 Apr 18:15 1776266135525_m1.jpg\n-rw-r--r-- 1 lukas staff 548908 15 Apr 18:15 1776266137606_m2.jpg\n-rw-r--r-- 1 lukas staff 207856 15 Apr 18:15 1776266138682_m1.jpg\n-rw-r--r-- 1 lukas staff 560222 15 Apr 18:15 1776266140759_m2.jpg\n-rw-r--r-- 1 lukas staff 560157 15 Apr 18:15 1776266143743_m2.jpg\n-rw-r--r-- 1 lukas staff 207838 15 Apr 18:15 1776266144684_m1.jpg\n-rw-r--r-- 1 lukas staff 537855 15 Apr 18:15 1776266145496_m2.jpg\n-rw-r--r-- 1 lukas staff 587185 15 Apr 18:15 1776266147770_m2.jpg\n-rw-r--r-- 1 lukas staff 209722 15 Apr 18:15 1776266150490_m1.jpg\n-rw-r--r-- 1 lukas staff 216901 15 Apr 18:15 1776266150747_m2.jpg\n-rw-r--r-- 1 lukas staff 208191 15 Apr 18:15 1776266153538_m1.jpg\n-rw-r--r-- 1 lukas staff 258901 15 Apr 18:15 1776266153787_m2.jpg\n-rw-r--r-- 1 lukas staff 276340 15 Apr 18:15 1776266156823_m2.jpg\n-rw-r--r-- 1 lukas staff 208298 15 Apr 18:15 1776266158610_m1.jpg\n-rw-r--r-- 1 lukas staff 590491 15 Apr 18:15 1776266158610_m2.jpg\n-rw-r--r-- 1 lukas staff 208192 15 Apr 18:16 1776266160959_m1.jpg\n-rw-r--r-- 1 lukas staff 545849 15 Apr 18:16 1776266161252_m2.jpg\n-rw-r--r-- 1 lukas staff 208154 15 Apr 18:16 1776266163104_m1.jpg\n-rw-r--r-- 1 lukas staff 519973 15 Apr 18:16 1776266164298_m2.jpg\n-rw-r--r-- 1 lukas staff 208231 15 Apr 18:16 1776266165561_m1.jpg\n-rw-r--r-- 1 lukas staff 593300 15 Apr 18:16 1776266166851_m2.jpg\n-rw-r--r-- 1 lukas staff 574561 15 Apr 18:16 1776266168075_m2.jpg\n-rw-r--r-- 1 lukas staff 208190 15 Apr 18:16 1776266168319_m1.jpg\n-rw-r--r-- 1 lukas staff 208164 15 Apr 18:16 1776266170354_m1.jpg\n-rw-r--r-- 1 lukas staff 558860 15 Apr 18:16 1776266170659_m2.jpg\n-rw-r--r-- 1 lukas staff 517959 15 Apr 18:16 1776266175820_m2.jpg\n-rw-r--r-- 1 lukas staff 208615 15 Apr 18:16 1776266177600_m1.jpg\n-rw-r--r-- 1 lukas staff 562544 15 Apr 18:16 1776266177627_m2.jpg\n-rw-r--r-- 1 lukas staff 208601 15 Apr 18:16 1776266180047_m1.jpg\n-rw-r--r-- 1 lukas staff 582678 15 Apr 18:16 1776266180212_m2.jpg\n-rw-r--r-- 1 lukas staff 208628 15 Apr 18:16 1776266181996_m1.jpg\n-rw-r--r-- 1 lukas staff 208571 15 Apr 18:16 1776266185646_m1.jpg\n-rw-r--r-- 1 lukas staff 594509 15 Apr 18:16 1776266185646_m2.jpg\n-rw-r--r-- 1 lukas staff 208622 15 Apr 18:16 1776266187916_m1.jpg\n-rw-r--r-- 1 lukas staff 608592 15 Apr 18:16 1776266188157_m2.jpg\n-rw-r--r-- 1 lukas staff 599957 15 Apr 18:16 1776266190500_m2.jpg\n-rw-r--r-- 1 lukas staff 208624 15 Apr 18:16 1776266190949_m1.jpg\n-rw-r--r-- 1 lukas staff 208694 15 Apr 18:16 1776266193217_m1.jpg\n-rw-r--r-- 1 lukas staff 615862 15 Apr 18:16 1776266193357_m2.jpg\n-rw-r--r-- 1 lukas staff 208254 15 Apr 18:16 1776266195513_m1.jpg\n-rw-r--r-- 1 lukas staff 624275 15 Apr 18:16 1776266195549_m2.jpg\n-rw-r--r-- 1 lukas staff 645335 15 Apr 18:16 1776266197725_m2.jpg\n-rw-r--r-- 1 lukas staff 208241 15 Apr 18:16 1776266198956_m1.jpg\n-rw-r--r-- 1 lukas staff 646868 15 Apr 18:16 1776266199007_m2.jpg\n-rw-r--r-- 1 lukas staff 208643 15 Apr 18:16 1776266202174_m1.jpg\n-rw-r--r-- 1 lukas staff 652412 15 Apr 18:16 1776266202213_m2.jpg\n-rw-r--r-- 1 lukas staff 208612 15 Apr 18:16 1776266206551_m1.jpg\n-rw-r--r-- 1 lukas staff 656571 15 Apr 18:16 1776266206551_m2.jpg\n-rw-r--r-- 1 lukas staff 208638 15 Apr 18:16 1776266209266_m1.jpg\n-rw-r--r-- 1 lukas staff 658369 15 Apr 18:16 1776266209280_m2.jpg\n-rw-r--r-- 1 lukas staff 208715 15 Apr 18:16 1776266212218_m1.jpg\n-rw-r--r-- 1 lukas staff 659247 15 Apr 18:16 1776266212218_m2.jpg\n-rw-r--r-- 1 lukas staff 208689 15 Apr 18:16 1776266215752_m1.jpg\n-rw-r--r-- 1 lukas staff 653016 15 Apr 18:16 1776266215771_m2.jpg\n-rw-r--r-- 1 lukas staff 586023 15 Apr 18:17 1776266219752_m2.jpg\n-rw-r--r-- 1 lukas staff 208588 15 Apr 18:17 1776266220701_m1.jpg\n-rw-r--r-- 1 lukas staff 633574 15 Apr 18:17 1776266221274_m2.jpg\n-rw-r--r-- 1 lukas staff 636933 15 Apr 18:17 1776266227340_m2.jpg\n-rw-r--r-- 1 lukas staff 639420 15 Apr 18:17 1776266232300_m2.jpg\n-rw-r--r-- 1 lukas staff 208544 15 Apr 18:17 1776266232337_m1.jpg\n-rw-r--r-- 1 lukas staff 643943 15 Apr 18:17 1776266236469_m2.jpg\n-rw-r--r-- 1 lukas staff 208610 15 Apr 18:17 1776266236483_m1.jpg\n-rw-r--r-- 1 lukas staff 208598 15 Apr 18:17 1776266238593_m1.jpg\n-rw-r--r-- 1 lukas staff 630398 15 Apr 18:17 1776266238602_m2.jpg\n-rw-r--r-- 1 lukas staff 624451 15 Apr 18:17 1776266240803_m2.jpg\n-rw-r--r-- 1 lukas staff 208484 15 Apr 18:17 1776266242547_m1.jpg\n-rw-r--r-- 1 lukas staff 630386 15 Apr 18:17 1776266242547_m2.jpg\n-rw-r--r-- 1 lukas staff 208525 15 Apr 18:17 1776266244786_m1.jpg\n-rw-r--r-- 1 lukas staff 633291 15 Apr 18:17 1776266245111_m2.jpg\n-rw-r--r-- 1 lukas staff 545820 15 Apr 18:17 1776266247239_m2.jpg\n-rw-r--r-- 1 lukas staff 547468 15 Apr 18:17 1776266248374_m2.jpg\n-rw-r--r-- 1 lukas staff 208653 15 Apr 18:17 1776266248977_m1.jpg\n-rw-r--r-- 1 lukas staff 533852 15 Apr 18:17 1776266249644_m2.jpg\n-rw-r--r-- 1 lukas staff 560142 15 Apr 18:17 1776266251631_m2.jpg\n-rw-r--r-- 1 lukas staff 208278 15 Apr 18:17 1776266254529_m1.jpg\n-rw-r--r-- 1 lukas staff 671156 15 Apr 18:17 1776266254554_m2.jpg\n-rw-r--r-- 1 lukas staff 671725 15 Apr 18:17 1776266257375_m2.jpg\n-rw-r--r-- 1 lukas staff 208252 15 Apr 18:17 1776266257388_m1.jpg\n-rw-r--r-- 1 lukas staff 208266 15 Apr 18:17 1776266260730_m1.jpg\n-rw-r--r-- 1 lukas staff 668299 15 Apr 18:17 1776266261140_m2.jpg\n-rw-r--r-- 1 lukas staff 208309 15 Apr 18:17 1776266262574_m1.jpg\n-rw-r--r-- 1 lukas staff 662509 15 Apr 18:17 1776266262882_m2.jpg\n-rw-r--r-- 1 lukas staff 208131 15 Apr 18:17 1776266264475_m1.jpg\n-rw-r--r-- 1 lukas staff 662810 15 Apr 18:17 1776266264869_m2.jpg\n-rw-r--r-- 1 lukas staff 208191 15 Apr 18:17 1776266266343_m1.jpg\n-rw-r--r-- 1 lukas staff 668093 15 Apr 18:17 1776266266919_m2.jpg\n-rw-r--r-- 1 lukas staff 208163 15 Apr 18:17 1776266268978_m1.jpg\n-rw-r--r-- 1 lukas staff 666086 15 Apr 18:17 1776266269305_m2.jpg\n-rw-r--r-- 1 lukas staff 208277 15 Apr 18:17 1776266271029_m1.jpg\n-rw-r--r-- 1 lukas staff 659339 15 Apr 18:17 1776266271383_m2.jpg\n-rw-r--r-- 1 lukas staff 208198 15 Apr 18:17 1776266273464_m1.jpg\n-rw-r--r-- 1 lukas staff 662828 15 Apr 18:17 1776266273971_m2.jpg\n-rw-r--r-- 1 lukas staff 208062 15 Apr 18:17 1776266275425_m1.jpg\n-rw-r--r-- 1 lukas staff 661898 15 Apr 18:17 1776266275684_m2.jpg\n-rw-r--r-- 1 lukas staff 208033 15 Apr 18:17 1776266277232_m1.jpg\n-rw-r--r-- 1 lukas staff 658221 15 Apr 18:17 1776266277517_m2.jpg\n-rw-r--r-- 1 lukas staff 208114 15 Apr 18:17 1776266279573_m1.jpg\n-rw-r--r-- 1 lukas staff 602127 15 Apr 18:18 1776266280047_m2.jpg\n-rw-r--r-- 1 lukas staff 208037 15 Apr 18:18 1776266281724_m1.jpg\n-rw-r--r-- 1 lukas staff 596966 15 Apr 18:18 1776266282107_m2.jpg\n-rw-r--r-- 1 lukas staff 208120 15 Apr 18:18 1776266283882_m1.jpg\n-rw-r--r-- 1 lukas staff 605123 15 Apr 18:18 1776266284188_m2.jpg\n-rw-r--r-- 1 lukas staff 208244 15 Apr 18:18 1776266285945_m1.jpg\n-rw-r--r-- 1 lukas staff 619753 15 Apr 18:18 1776266286471_m2.jpg\n-rw-r--r-- 1 lukas staff 208208 15 Apr 18:18 1776266288028_m1.jpg\n-rw-r--r-- 1 lukas staff 642228 15 Apr 18:18 1776266288334_m2.jpg\n-rw-r--r-- 1 lukas staff 208132 15 Apr 18:18 1776266289850_m1.jpg\n-rw-r--r-- 1 lukas staff 596740 15 Apr 18:18 1776266290179_m2.jpg\n-rw-r--r-- 1 lukas staff 208063 15 Apr 18:18 1776266291759_m1.jpg\n-rw-r--r-- 1 lukas staff 519390 15 Apr 18:18 1776266292102_m2.jpg\n-rw-r--r-- 1 lukas staff 208064 15 Apr 18:18 1776266293780_m1.jpg\n-rw-r--r-- 1 lukas staff 570229 15 Apr 18:18 1776266294157_m2.jpg\n-rw-r--r-- 1 lukas staff 208572 15 Apr 18:18 1776266296164_m1.jpg\n-rw-r--r-- 1 lukas staff 627388 15 Apr 18:18 1776266296515_m2.jpg\n-rw-r--r-- 1 lukas staff 208569 15 Apr 18:18 1776266298335_m1.jpg\n-rw-r--r-- 1 lukas staff 634945 15 Apr 18:18 1776266298705_m2.jpg\n-rw-r--r-- 1 lukas staff 208639 15 Apr 18:18 1776266300354_m1.jpg\n-rw-r--r-- 1 lukas staff 657628 15 Apr 18:18 1776266300766_m2.jpg\n-rw-r--r-- 1 lukas staff 657244 15 Apr 18:18 1776266302789_m2.jpg\n-rw-r--r-- 1 lukas staff 208494 15 Apr 18:18 1776266303032_m1.jpg\n-rw-r--r-- 1 lukas staff 644942 15 Apr 18:18 1776266305193_m2.jpg\n-rw-r--r-- 1 lukas staff 208528 15 Apr 18:18 1776266305226_m1.jpg\n-rw-r--r-- 1 lukas staff 659418 15 Apr 18:18 1776266307482_m2.jpg\n-rw-r--r-- 1 lukas staff 208235 15 Apr 18:18 1776266307995_m1.jpg\n-rw-r--r-- 1 lukas staff 653477 15 Apr 18:18 1776266310362_m2.jpg\n-rw-r--r-- 1 lukas staff 650556 15 Apr 18:18 1776266311519_m2.jpg\n-rw-r--r-- 1 lukas staff 208178 15 Apr 18:18 1776266311576_m1.jpg\n-rw-r--r-- 1 lukas staff 639707 15 Apr 18:18 1776266314332_m2.jpg\n-rw-r--r-- 1 lukas staff 208212 15 Apr 18:18 1776266314402_m1.jpg\n-rw-r--r-- 1 lukas staff 627225 15 Apr 18:18 1776266316656_m2.jpg\n-rw-r--r-- 1 lukas staff 640482 15 Apr 18:18 1776266317791_m2.jpg\n-rw-r--r-- 1 lukas staff 208927 15 Apr 18:18 1776266317875_m1.jpg\n-rw-r--r-- 1 lukas staff 655721 15 Apr 18:18 1776266320034_m2.jpg\n-rw-r--r-- 1 lukas staff 653914 15 Apr 18:18 1776266321149_m2.jpg\n-rw-r--r-- 1 lukas staff 208973 15 Apr 18:18 1776266322248_m1.jpg\n-rw-r--r-- 1 lukas staff 651290 15 Apr 18:18 1776266322405_m2.jpg\n-rw-r--r-- 1 lukas staff 208883 15 Apr 18:18 1776266324678_m1.jpg\n-rw-r--r-- 1 lukas staff 649799 15 Apr 18:18 1776266324696_m2.jpg\n-rw-r--r-- 1 lukas staff 208944 15 Apr 18:18 1776266327023_m1.jpg\n-rw-r--r-- 1 lukas staff 640016 15 Apr 18:18 1776266327481_m2.jpg\n-rw-r--r-- 1 lukas staff 648723 15 Apr 18:18 1776266329400_m2.jpg\n-rw-r--r-- 1 lukas staff 649676 15 Apr 18:18 1776266330593_m2.jpg\n-rw-r--r-- 1 lukas staff 208128 15 Apr 18:18 1776266331799_m1.jpg\n-rw-r--r-- 1 lukas staff 657268 15 Apr 18:18 1776266331870_m2.jpg\n-rw-r--r-- 1 lukas staff 614701 15 Apr 18:18 1776266334838_m2.jpg\n-rw-r--r-- 1 lukas staff 208599 15 Apr 18:18 1776266334866_m1.jpg\n-rw-r--r-- 1 lukas staff 208720 15 Apr 18:18 1776266337075_m1.jpg\n-rw-r--r-- 1 lukas staff 635012 15 Apr 18:18 1776266337384_m2.jpg\n-rw-r--r-- 1 lukas staff 208649 15 Apr 18:18 1776266339499_m1.jpg\n-rw-r--r-- 1 lukas staff 654410 15 Apr 18:19 1776266340051_m2.jpg\n-rw-r--r-- 1 lukas staff 670162 15 Apr 18:19 1776266342278_m2.jpg\n-rw-r--r-- 1 lukas staff 208679 15 Apr 18:19 1776266343422_m1.jpg\n-rw-r--r-- 1 lukas staff 679486 15 Apr 18:19 1776266343480_m2.jpg\n-rw-r--r-- 1 lukas staff 580457 15 Apr 18:19 1776266346149_m2.jpg\n-rw-r--r-- 1 lukas staff 613073 15 Apr 18:19 1776266349191_m2.jpg\n-rw-r--r-- 1 lukas staff 208605 15 Apr 18:19 1776266349504_m1.jpg\n-rw-r--r-- 1 lukas staff 208530 15 Apr 18:19 1776266351872_m1.jpg\n-rw-r--r-- 1 lukas staff 618382 15 Apr 18:19 1776266352314_m2.jpg\n-rw-r--r-- 1 lukas staff 208156 15 Apr 18:19 1776266354320_m1.jpg\n-rw-r--r-- 1 lukas staff 637916 15 Apr 18:19 1776266354736_m2.jpg\n-rw-r--r-- 1 lukas staff 208104 15 Apr 18:19 1776266356503_m1.jpg\n-rw-r--r-- 1 lukas staff 635941 15 Apr 18:19 1776266356846_m2.jpg\n-rw-r--r-- 1 lukas staff 208119 15 Apr 18:19 1776266358528_m1.jpg\n-rw-r--r-- 1 lukas staff 618746 15 Apr 18:19 1776266358951_m2.jpg\n-rw-r--r-- 1 lukas staff 741230 15 Apr 18:19 1776266360933_m2.jpg\n-rw-r--r-- 1 lukas staff 684325 15 Apr 18:19 1776266362281_m2.jpg\n-rw-r--r-- 1 lukas staff 208646 15 Apr 18:19 1776266362913_m1.jpg\n-rw-r--r-- 1 lukas staff 700483 15 Apr 18:19 1776266365163_m2.jpg\n-rw-r--r-- 1 lukas staff 208877 15 Apr 18:19 1776266366139_m1.jpg\n-rw-r--r-- 1 lukas staff 601181 15 Apr 18:19 1776266366639_m2.jpg\n-rw-r--r-- 1 lukas staff 208909 15 Apr 18:19 1776266369139_m1.jpg\n-rw-r--r-- 1 lukas staff 655095 15 Apr 18:19 1776266369139_m2.jpg\n-rw-r--r-- 1 lukas staff 656950 15 Apr 18:19 1776266371906_m2.jpg\n-rw-r--r-- 1 lukas staff 208873 15 Apr 18:19 1776266371909_m1.jpg\n-rw-r--r-- 1 lukas staff 596595 15 Apr 18:19 1776266374350_m2.jpg\n-rw-r--r-- 1 lukas staff 678600 15 Apr 18:19 1776266375785_m2.jpg\n-rw-r--r-- 1 lukas staff 208146 15 Apr 18:19 1776266377145_m1.jpg\n-rw-r--r-- 1 lukas staff 688844 15 Apr 18:19 1776266377145_m2.jpg\n-rw-r--r-- 1 lukas staff 208870 15 Apr 18:19 1776266384365_m1.jpg\n-rw-r--r-- 1 lukas staff 684366 15 Apr 18:19 1776266384403_m2.jpg\n-rw-r--r-- 1 lukas staff 208252 15 Apr 18:19 1776266386353_m1.jpg\n-rw-r--r-- 1 lukas staff 662242 15 Apr 18:19 1776266386874_m2.jpg\n-rw-r--r-- 1 lukas staff 208227 15 Apr 18:19 1776266388905_m1.jpg\n-rw-r--r-- 1 lukas staff 669929 15 Apr 18:19 1776266389162_m2.jpg\n-rw-r--r-- 1 lukas staff 564108 15 Apr 18:19 1776266394415_m2.jpg\n-rw-r--r-- 1 lukas staff 208254 15 Apr 18:19 1776266394669_m1.jpg\n-rw-r--r-- 1 lukas staff 597473 15 Apr 18:19 1776266397429_m2.jpg\n-rw-r--r-- 1 lukas staff 208197 15 Apr 18:19 1776266398122_m1.jpg\n-rw-r--r-- 1 lukas staff 588253 15 Apr 18:19 1776266398654_m2.jpg\n-rw-r--r-- 1 lukas staff 208263 15 Apr 18:20 1776266400169_m1.jpg\n-rw-r--r-- 1 lukas staff 590676 15 Apr 18:20 1776266400800_m2.jpg\n-rw-r--r-- 1 lukas staff 660135 15 Apr 18:20 1776266403120_m2.jpg\n-rw-r--r-- 1 lukas staff 208198 15 Apr 18:20 1776266404315_m1.jpg\n-rw-r--r-- 1 lukas staff 663732 15 Apr 18:20 1776266404344_m2.jpg\n-rw-r--r-- 1 lukas staff 676367 15 Apr 18:20 1776266410701_m2.jpg\n-rw-r--r-- 1 lukas staff 208239 15 Apr 18:20 1776266410716_m1.jpg\n-rw-r--r-- 1 lukas staff 208866 15 Apr 18:20 1776266423385_m1.jpg\n-rw-r--r-- 1 lukas staff 690762 15 Apr 18:20 1776266423399_m2.jpg\n-rw-r--r-- 1 lukas staff 672619 15 Apr 18:20 1776266426942_m2.jpg\n-rw-r--r-- 1 lukas staff 208889 15 Apr 18:20 1776266426971_m1.jpg\n-rw-r--r-- 1 lukas staff 208218 15 Apr 18:20 1776266430808_m1.jpg\n-rw-r--r-- 1 lukas staff 671881 15 Apr 18:20 1776266430808_m2.jpg\n-rw-r--r-- 1 lukas staff 208183 15 Apr 18:20 1776266433623_m1.jpg\n-rw-r--r-- 1 lukas staff 674761 15 Apr 18:20 1776266433670_m2.jpg\n-rw-r--r-- 1 lukas staff 208217 15 Apr 18:20 1776266436240_m1.jpg\n-rw-r--r-- 1 lukas staff 670159 15 Apr 18:20 1776266436263_m2.jpg\n-rw-r--r-- 1 lukas staff 208182 15 Apr 18:20 1776266438629_m1.jpg\n-rw-r--r-- 1 lukas staff 668057 15 Apr 18:20 1776266438638_m2.jpg\n-rw-r--r-- 1 lukas staff 208906 15 Apr 18:20 1776266442252_m1.jpg\n-rw-r--r-- 1 lukas staff 672509 15 Apr 18:20 1776266442293_m2.jpg\n-rw-r--r-- 1 lukas staff 208955 15 Apr 18:20 1776266444286_m1.jpg\n-rw-r--r-- 1 lukas staff 669667 15 Apr 18:20 1776266444713_m2.jpg\n-rw-r--r-- 1 lukas staff 711375 15 Apr 18:20 1776266446659_m2.jpg\n-rw-r--r-- 1 lukas staff 208164 15 Apr 18:20 1776266447514_m1.jpg\n-rw-r--r-- 1 lukas staff 739201 15 Apr 18:20 1776266448562_m2.jpg\n-rw-r--r-- 1 lukas staff 208600 15 Apr 18:20 1776266450066_m1.jpg\n-rw-r--r-- 1 lukas staff 735015 15 Apr 18:20 1776266450077_m2.jpg\n-rw-r--r-- 1 lukas staff 602085 15 Apr 18:20 1776266452815_m2.jpg\n-rw-r--r-- 1 lukas staff 554910 15 Apr 18:20 1776266455812_m2.jpg\n-rw-r--r-- 1 lukas staff 208706 15 Apr 18:20 1776266457074_m1.jpg\n-rw-r--r-- 1 lukas staff 668265 15 Apr 18:20 1776266457218_m2.jpg\n-rw-r--r-- 1 lukas staff 627127 15 Apr 18:21 1776266462398_m2.jpg\n-rw-r--r-- 1 lukas staff 651254 15 Apr 18:21 1776266464654_m2.jpg\n-rw-r--r-- 1 lukas staff 208782 15 Apr 18:21 1776266464655_m1.jpg\n-rw-r--r-- 1 lukas staff 208337 15 Apr 18:21 1776266467161_m1.jpg\n-rw-r--r-- 1 lukas staff 675477 15 Apr 18:21 1776266467769_m2.jpg\n-rw-r--r-- 1 lukas staff 208352 15 Apr 18:21 1776266470056_m1.jpg\n-rw-r--r-- 1 lukas staff 646287 15 Apr 18:21 1776266470426_m2.jpg\n-rw-r--r-- 1 lukas staff 208441 15 Apr 18:21 1776266472480_m1.jpg\n-rw-r--r-- 1 lukas staff 670331 15 Apr 18:21 1776266473095_m2.jpg\n-rw-r--r-- 1 lukas staff 208409 15 Apr 18:21 1776266474797_m1.jpg\n-rw-r--r-- 1 lukas staff 658783 15 Apr 18:21 1776266475129_m2.jpg\n-rw-r--r-- 1 lukas staff 208807 15 Apr 18:21 1776266476839_m1.jpg\n-rw-r--r-- 1 lukas staff 658240 15 Apr 18:21 1776266477168_m2.jpg\n-rw-r--r-- 1 lukas staff 208844 15 Apr 18:21 1776266478922_m1.jpg\n-rw-r--r-- 1 lukas staff 666996 15 Apr 18:21 1776266479271_m2.jpg\n-rw-r--r-- 1 lukas staff 699189 15 Apr 18:21 1776266481646_m2.jpg\n-rw-r--r-- 1 lukas staff 708975 15 Apr 18:21 1776266482907_m2.jpg\n-rw-r--r-- 1 lukas staff 682317 15 Apr 18:21 1776266487203_m2.jpg\n-rw-r--r-- 1 lukas staff 209118 15 Apr 18:21 1776266489247_m1.jpg\n-rw-r--r-- 1 lukas staff 687083 15 Apr 18:21 1776266489247_m2.jpg\n-rw-r--r-- 1 lukas staff 209082 15 Apr 18:21 1776266491199_m1.jpg\n-rw-r--r-- 1 lukas staff 676433 15 Apr 18:21 1776266492289_m2.jpg\n-rw-r--r-- 1 lukas staff 209174 15 Apr 18:21 1776266493476_m1.jpg\n-rw-r--r-- 1 lukas staff 668920 15 Apr 18:21 1776266493678_m2.jpg\n-rw-r--r-- 1 lukas staff 208388 15 Apr 18:21 1776266497984_m1.jpg\n-rw-r--r-- 1 lukas staff 652067 15 Apr 18:21 1776266497984_m2.jpg\n-rw-r--r-- 1 lukas staff 208298 15 Apr 18:21 1776266501940_m1.jpg\n-rw-r--r-- 1 lukas staff 632049 15 Apr 18:21 1776266501960_m2.jpg\n-rw-r--r-- 1 lukas staff 208349 15 Apr 18:21 1776266503799_m1.jpg\n-rw-r--r-- 1 lukas staff 643154 15 Apr 18:21 1776266504159_m2.jpg\n-rw-r--r-- 1 lukas staff 634868 15 Apr 18:21 1776266507710_m2.jpg\n-rw-r--r-- 1 lukas staff 208376 15 Apr 18:21 1776266507750_m1.jpg\n-rw-r--r-- 1 lukas staff 208249 15 Apr 18:21 1776266509896_m1.jpg\n-rw-r--r-- 1 lukas staff 659743 15 Apr 18:21 1776266510358_m2.jpg\n-rw-r--r-- 1 lukas staff 675221 15 Apr 18:21 1776266512596_m2.jpg\n-rw-r--r-- 1 lukas staff 699120 15 Apr 18:21 1776266513811_m2.jpg\n-rw-r--r-- 1 lukas staff 208799 15 Apr 18:21 1776266513915_m1.jpg\n-rw-r--r-- 1 lukas staff 661306 15 Apr 18:21 1776266517106_m2.jpg\n-rw-r--r-- 1 lukas staff 208768 15 Apr 18:21 1776266519085_m1.jpg\n-rw-r--r-- 1 lukas staff 654783 15 Apr 18:21 1776266519085_m2.jpg\n-rw-r--r-- 1 lukas staff 657014 15 Apr 18:22 1776266521775_m2.jpg\n-rw-r--r-- 1 lukas staff 208743 15 Apr 18:22 1776266521905_m1.jpg\n-rw-r--r-- 1 lukas staff 208765 15 Apr 18:22 1776266523982_m1.jpg\n-rw-r--r-- 1 lukas staff 676963 15 Apr 18:22 1776266524383_m2.jpg\n-rw-r--r-- 1 lukas staff 208595 15 Apr 18:22 1776266525995_m1.jpg\n-rw-r--r-- 1 lukas staff 679026 15 Apr 18:22 1776266526331_m2.jpg\n-rw-r--r-- 1 lukas staff 208601 15 Apr 18:22 1776266527968_m1.jpg\n-rw-r--r-- 1 lukas staff 691434 15 Apr 18:22 1776266528359_m2.jpg\n-rw-r--r-- 1 lukas staff 208790 15 Apr 18:22 1776266530045_m1.jpg\n-rw-r--r-- 1 lukas staff 617327 15 Apr 18:22 1776266530409_m2.jpg\n-rw-r--r-- 1 lukas staff 208821 15 Apr 18:22 1776266532371_m1.jpg\n-rw-r--r-- 1 lukas staff 695409 15 Apr 18:22 1776266532643_m2.jpg\n-rw-r--r-- 1 lukas staff 692244 15 Apr 18:22 1776266534764_m2.jpg\n-rw-r--r-- 1 lukas staff 701793 15 Apr 18:22 1776266538373_m2.jpg\n-rw-r--r-- 1 lukas staff 208219 15 Apr 18:22 1776266538394_m1.jpg\n-rw-r--r-- 1 lukas staff 671959 15 Apr 18:22 1776266540698_m2.jpg\n-rw-r--r-- 1 lukas staff 208351 15 Apr 18:22 1776266541977_m1.jpg\n-rw-r--r-- 1 lukas staff 666355 15 Apr 18:22 1776266541977_m2.jpg\n-rw-r--r-- 1 lukas staff 208360 15 Apr 18:22 1776266543911_m1.jpg\n-rw-r--r-- 1 lukas staff 682036 15 Apr 18:22 1776266544351_m2.jpg\n-rw-r--r-- 1 lukas staff 209141 15 Apr 18:22 1776266546119_m1.jpg\n-rw-r--r-- 1 lukas staff 678365 15 Apr 18:22 1776266546536_m2.jpg\n-rw-r--r-- 1 lukas staff 209146 15 Apr 18:22 1776266548258_m1.jpg\n-rw-r--r-- 1 lukas staff 676342 15 Apr 18:22 1776266548725_m2.jpg\n-rw-r--r-- 1 lukas staff 209085 15 Apr 18:22 1776266550501_m1.jpg\n-rw-r--r-- 1 lukas staff 676211 15 Apr 18:22 1776266550967_m2.jpg\n-rw-r--r-- 1 lukas staff 209119 15 Apr 18:22 1776266552643_m1.jpg\n-rw-r--r-- 1 lukas staff 628801 15 Apr 18:22 1776266553078_m2.jpg\n-rw-r--r-- 1 lukas staff 209015 15 Apr 18:22 1776266554763_m1.jpg\n-rw-r--r-- 1 lukas staff 622953 15 Apr 18:22 1776266555141_m2.jpg\n-rw-r--r-- 1 lukas staff 208376 15 Apr 18:22 1776266556828_m1.jpg\n-rw-r--r-- 1 lukas staff 624322 15 Apr 18:22 1776266557207_m2.jpg\n-rw-r--r-- 1 lukas staff 208394 15 Apr 18:22 1776266559394_m1.jpg\n-rw-r--r-- 1 lukas staff 644831 15 Apr 18:22 1776266559750_m2.jpg\n-rw-r--r-- 1 lukas staff 208349 15 Apr 18:22 1776266561640_m1.jpg\n-rw-r--r-- 1 lukas staff 675478 15 Apr 18:22 1776266562198_m2.jpg\n-rw-r--r-- 1 lukas staff 208221 15 Apr 18:22 1776266564068_m1.jpg\n-rw-r--r-- 1 lukas staff 684799 15 Apr 18:22 1776266564562_m2.jpg\n-rw-r--r-- 1 lukas staff 208266 15 Apr 18:22 1776266566774_m1.jpg\n-rw-r--r-- 1 lukas staff 683359 15 Apr 18:22 1776266567099_m2.jpg\n-rw-r--r-- 1 lukas staff 208351 15 Apr 18:22 1776266568684_m1.jpg\n-rw-r--r-- 1 lukas staff 674951 15 Apr 18:22 1776266569007_m2.jpg\n-rw-r--r-- 1 lukas staff 208266 15 Apr 18:22 1776266570769_m1.jpg\n-rw-r--r-- 1 lukas staff 620972 15 Apr 18:22 1776266571289_m2.jpg\n-rw-r--r-- 1 lukas staff 208184 15 Apr 18:22 1776266573044_m1.jpg\n-rw-r--r-- 1 lukas staff 596908 15 Apr 18:22 1776266573459_m2.jpg\n-rw-r--r-- 1 lukas staff 208118 15 Apr 18:22 1776266575226_m1.jpg\n-rw-r--r-- 1 lukas staff 595063 15 Apr 18:22 1776266575765_m2.jpg\n-rw-r--r-- 1 lukas staff 208151 15 Apr 18:22 1776266577746_m1.jpg\n-rw-r--r-- 1 lukas staff 601762 15 Apr 18:22 1776266578123_m2.jpg\n-rw-r--r-- 1 lukas staff 208554 15 Apr 18:23 1776266580050_m1.jpg\n-rw-r--r-- 1 lukas staff 600430 15 Apr 18:23 1776266580291_m2.jpg\n-rw-r--r-- 1 lukas staff 208707 15 Apr 18:23 1776266582019_m1.jpg\n-rw-r--r-- 1 lukas staff 673088 15 Apr 18:23 1776266582317_m2.jpg\n-rw-r--r-- 1 lukas staff 208733 15 Apr 18:23 1776266584164_m1.jpg\n-rw-r--r-- 1 lukas staff 688362 15 Apr 18:23 1776266584473_m2.jpg\n-rw-r--r-- 1 lukas staff 208745 15 Apr 18:23 1776266586377_m1.jpg\n-rw-r--r-- 1 lukas staff 687179 15 Apr 18:23 1776266586902_m2.jpg\n-rw-r--r-- 1 lukas staff 208294 15 Apr 18:23 1776266588885_m1.jpg\n-rw-r--r-- 1 lukas staff 706828 15 Apr 18:23 1776266589319_m2.jpg\n-rw-r--r-- 1 lukas staff 208256 15 Apr 18:23 1776266591044_m1.jpg\n-rw-r--r-- 1 lukas staff 691748 15 Apr 18:23 1776266591559_m2.jpg\n-rw-r--r-- 1 lukas staff 686194 15 Apr 18:23 1776266593540_m2.jpg\n-rw-r--r-- 1 lukas staff 684706 15 Apr 18:23 1776266594510_m2.jpg\n-rw-r--r-- 1 lukas staff 208192 15 Apr 18:23 1776266594557_m1.jpg\n-rw-r--r-- 1 lukas staff 669321 15 Apr 18:23 1776266596804_m2.jpg\n-rw-r--r-- 1 lukas staff 677396 15 Apr 18:23 1776266597789_m2.jpg\n-rw-r--r-- 1 lukas staff 683261 15 Apr 18:23 1776266598784_m2.jpg\n-rw-r--r-- 1 lukas staff 685463 15 Apr 18:23 1776266599817_m2.jpg\n-rw-r--r-- 1 lukas staff 681856 15 Apr 18:23 1776266601197_m2.jpg\n-rw-r--r-- 1 lukas staff 678002 15 Apr 18:23 1776266604376_m2.jpg\n-rw-r--r-- 1 lukas staff 207973 15 Apr 18:23 1776266604386_m1.jpg\n-rw-r--r-- 1 lukas staff 208398 15 Apr 18:23 1776266606500_m1.jpg\n-rw-r--r-- 1 lukas staff 726978 15 Apr 18:23 1776266606726_m2.jpg\n-rw-r--r-- 1 lukas staff 208382 15 Apr 18:23 1776266608483_m1.jpg\n-rw-r--r-- 1 lukas staff 695186 15 Apr 18:23 1776266608675_m2.jpg\n-rw-r--r-- 1 lukas staff 684881 15 Apr 18:23 1776266610836_m2.jpg\n-rw-r--r-- 1 lukas staff 208351 15 Apr 18:23 1776266610849_m1.jpg\n-rw-r--r-- 1 lukas staff 208371 15 Apr 18:23 1776266612653_m1.jpg\n-rw-r--r-- 1 lukas staff 702368 15 Apr 18:23 1776266613019_m2.jpg\n-rw-r--r-- 1 lukas staff 208311 15 Apr 18:23 1776266614754_m1.jpg\n-rw-r--r-- 1 lukas staff 697167 15 Apr 18:23 1776266615197_m2.jpg\n-rw-r--r-- 1 lukas staff 208256 15 Apr 18:23 1776266617001_m1.jpg\n-rw-r--r-- 1 lukas staff 708464 15 Apr 18:23 1776266617412_m2.jpg\n-rw-r--r-- 1 lukas staff 208402 15 Apr 18:23 1776266619249_m1.jpg\n-rw-r--r-- 1 lukas staff 724407 15 Apr 18:23 1776266619671_m2.jpg\n-rw-r--r-- 1 lukas staff 208307 15 Apr 18:23 1776266621180_m1.jpg\n-rw-r--r-- 1 lukas staff 725296 15 Apr 18:23 1776266621573_m2.jpg\n-rw-r--r-- 1 lukas staff 730086 15 Apr 18:23 1776266623619_m2.jpg\n-rw-r--r-- 1 lukas staff 208318 15 Apr 18:23 1776266624686_m1.jpg\n-rw-r--r-- 1 lukas staff 725848 15 Apr 18:23 1776266624788_m2.jpg\n-rw-r--r-- 1 lukas staff 208308 15 Apr 18:23 1776266628918_m1.jpg\n-rw-r--r-- 1 lukas staff 732348 15 Apr 18:23 1776266628918_m2.jpg\n-rw-r--r-- 1 lukas staff 710253 15 Apr 18:23 1776266631933_m2.jpg\n-rw-r--r-- 1 lukas staff 710294 15 Apr 18:23 1776266634975_m2.jpg\n-rw-r--r-- 1 lukas staff 208400 15 Apr 18:23 1776266635249_m1.jpg\n-rw-r--r-- 1 lukas staff 667620 15 Apr 18:23 1776266638013_m2.jpg\n-rw-r--r-- 1 lukas staff 693071 15 Apr 18:24 1776266641062_m2.jpg\n-rw-r--r-- 1 lukas staff 675607 15 Apr 18:24 1776266644087_m2.jpg\n-rw-r--r-- 1 lukas staff 208309 15 Apr 18:24 1776266646104_m1.jpg\n-rw-r--r-- 1 lukas staff 699155 15 Apr 18:24 1776266646104_m2.jpg\n-rw-r--r-- 1 lukas staff 636312 15 Apr 18:24 1776266648468_m2.jpg\n-rw-r--r-- 1 lukas staff 208823 15 Apr 18:24 1776266649991_m1.jpg\n-rw-r--r-- 1 lukas staff 677743 15 Apr 18:24 1776266649991_m2.jpg\n-rw-r--r-- 1 lukas staff 285273 15 Apr 18:24 1776266655380_m2.jpg\n-rw-r--r-- 1 lukas staff 208338 15 Apr 18:24 1776266656348_m1.jpg\n-rw-r--r-- 1 lukas staff 299758 15 Apr 18:24 1776266657887_m2.jpg\n-rw-r--r-- 1 lukas staff 208905 15 Apr 18:24 1776266660014_m1.jpg\n-rw-r--r-- 1 lukas staff 505543 15 Apr 18:24 1776266660357_m2.jpg\n-rw-r--r-- 1 lukas staff 130773 15 Apr 18:24 1776266662583_m2.jpg\n-rw-r--r-- 1 lukas staff 208837 15 Apr 18:24 1776266662590_m1.jpg\n-rw-r--r-- 1 lukas staff 131262 15 Apr 18:24 1776266665030_m2.jpg\n-rw-r--r-- 1 lukas staff 208543 15 Apr 18:24 1776266665178_m1.jpg\n-rw-r--r-- 1 lukas staff 82600 15 Apr 18:24 1776266668094_m2.jpg\n-rw-r--r-- 1 lukas staff 99799 15 Apr 18:24 1776266671070_m2.jpg\n-rw-r--r-- 1 lukas staff 209265 15 Apr 18:24 1776266671742_m1.jpg\n-rw-r--r-- 1 lukas staff 69569 15 Apr 18:24 1776266672855_m2.jpg\n-rw-r--r-- 1 lukas staff 233878 15 Apr 18:24 1776266675463_m2.jpg\n-rw-r--r-- 1 lukas staff 233944 15 Apr 18:24 1776266676686_m2.jpg\n-rw-r--r-- 1 lukas staff 208529 15 Apr 18:24 1776266676718_m1.jpg\n-rw-r--r-- 1 lukas staff 208411 15 Apr 18:24 1776266678430_m1.jpg\n-rw-r--r-- 1 lukas staff 275989 15 Apr 18:24 1776266678431_m2.jpg\n-rw-r--r-- 1 lukas staff 258903 15 Apr 18:24 1776266679106_m2.jpg\n-rw-r--r-- 1 lukas staff 278951 15 Apr 18:24 1776266682164_m2.jpg\n-rw-r--r-- 1 lukas staff 208465 15 Apr 18:24 1776266687272_m1.jpg\n-rw-r--r-- 1 lukas staff 208398 15 Apr 18:24 1776266690323_m1.jpg\n-rw-r--r-- 1 lukas staff 273693 15 Apr 18:24 1776266691227_m2.jpg\n-rw-r--r-- 1 lukas staff 185943 15 Apr 18:24 1776266696382_m1.jpg\n-rw-r--r-- 1 lukas staff 271869 15 Apr 18:24 1776266697274_m2.jpg\n-rw-r--r-- 1 lukas staff 366699 15 Apr 18:25 1776266705465_m1.jpg\n-rw-r--r-- 1 lukas staff 186079 15 Apr 18:25 1776266708505_m1.jpg\n-rw-r--r-- 1 lukas staff 276639 15 Apr 18:38 1776267525892_m1.jpg\n-rw-r--r-- 1 lukas staff 282408 15 Apr 18:38 1776267527527_m2.jpg\n-rw-r--r-- 1 lukas staff 282541 15 Apr 18:38 1776267533056_m1.jpg\n-rw-r--r-- 1 lukas staff 1292480 15 Apr 10:09 compact_monitor_1_1776236979346.mp4\n-rw-r--r-- 1 lukas staff 6304039 15 Apr 10:14 compact_monitor_1_1776237284692.mp4\n-rw-r--r-- 1 lukas staff 2514313 15 Apr 10:19 compact_monitor_1_1776237595554.mp4\n-rw-r--r-- 1 lukas staff 2821904 15 Apr 10:25 compact_monitor_1_1776237899635.mp4\n-rw-r--r-- 1 lukas staff 2785297 15 Apr 10:30 compact_monitor_1_1776238207393.mp4\n-rw-r--r-- 1 lukas staff 1639472 15 Apr 10:35 compact_monitor_1_1776238512537.mp4\n-rw-r--r-- 1 lukas staff 3207933 15 Apr 10:40 compact_monitor_1_1776238815528.mp4\n-rw-r--r-- 1 lukas staff 3594658 15 Apr 10:45 compact_monitor_1_1776239122381.mp4\n-rw-r--r-- 1 lukas staff 3671517 15 Apr 10:50 compact_monitor_1_1776239429225.mp4\n-rw-r--r-- 1 lukas staff 4031948 15 Apr 10:55 compact_monitor_1_1776239734998.mp4\n-rw-r--r-- 1 lukas staff 3529461 15 Apr 11:00 compact_monitor_1_1776240042925.mp4\n-rw-r--r-- 1 lukas staff 5234845 15 Apr 11:05 compact_monitor_1_1776240349311.mp4\n-rw-r--r-- 1 lukas staff 3323085 15 Apr 11:11 compact_monitor_1_1776240657823.mp4\n-rw-r--r-- 1 lukas staff 2204215 15 Apr 11:16 compact_monitor_1_1776240963306.mp4\n-rw-r--r-- 1 lukas staff 2387534 15 Apr 11:21 compact_monitor_1_1776241266776.mp4\n-rw-r--r-- 1 lukas staff 4921676 15 Apr 11:26 compact_monitor_1_1776241570939.mp4\n-rw-r--r-- 1 lukas staff 2135612 15 Apr 11:31 compact_monitor_1_1776241878162.mp4\n-rw-r--r-- 1 lukas staff 494014 15 Apr 11:36 compact_monitor_1_1776242182944.mp4\n-rw-r--r-- 1 lukas staff 1986658 15 Apr 11:41 compact_monitor_1_1776242488565.mp4\n-rw-r--r-- 1 lukas staff 1651327 15 Apr 11:46 compact_monitor_1_1776242792386.mp4\n-rw-r--r-- 1 lukas staff 190056 15 Apr 11:51 compact_monitor_1_1776243099454.mp4\n-rw-r--r-- 1 lukas staff 489195 15 Apr 11:56 compact_monitor_1_1776243401560.mp4\n-rw-r--r-- 1 lukas staff 637245 15 Apr 12:01 compact_monitor_1_1776243707339.mp4\n-rw-r--r-- 1 lukas staff 836102 15 Apr 12:06 compact_monitor_1_1776244016111.mp4\n-rw-r--r-- 1 lukas staff 2250311 15 Apr 12:12 compact_monitor_1_1776244325248.mp4\n-rw-r--r-- 1 lukas staff 4438961 15 Apr 12:17 compact_monitor_1_1776244633485.mp4\n-rw-r--r-- 1 lukas staff 2024811 15 Apr 12:22 compact_monitor_1_1776244939105.mp4\n-rw-r--r-- 1 lukas staff 1140502 15 Apr 12:27 compact_monitor_1_1776245242576.mp4\n-rw-r--r-- 1 lukas staff 818870 15 Apr 12:32 compact_monitor_1_1776245545145.mp4\n-rw-r--r-- 1 lukas staff 506104 15 Apr 12:37 compact_monitor_1_1776245850845.mp4\n-rw-r--r-- 1 lukas staff 506372 15 Apr 12:42 compact_monitor_1_1776246157330.mp4\n-rw-r--r-- 1 lukas staff 585365 15 Apr 12:47 compact_monitor_1_1776246461621.mp4\n-rw-r--r-- 1 lukas staff 1536187 15 Apr 12:52 compact_monitor_1_1776246766463.mp4\n-rw-r--r-- 1 lukas staff 2825443 15 Apr 12:57 compact_monitor_1_1776247072489.mp4\n-rw-r--r-- 1 lukas staff 3094796 15 Apr 13:03 compact_monitor_1_1776247379957.mp4\n-rw-r--r-- 1 lukas staff 396633 15 Apr 13:08 compact_monitor_1_1776247688246.mp4\n-rw-r--r-- 1 lukas staff 909684 15 Apr 13:13 compact_monitor_1_1776247993728.mp4\n-rw-r--r-- 1 lukas staff 1577484 15 Apr 13:18 compact_monitor_1_1776248301121.mp4\n-rw-r--r-- 1 lukas staff 1079237 15 Apr 13:23 compact_monitor_1_1776248607315.mp4\n-rw-r--r-- 1 lukas staff 1091368 15 Apr 13:28 compact_monitor_1_1776248924298.mp4\n-rw-r--r-- 1 lukas staff 925798 15 Apr 13:34 compact_monitor_1_1776249241863.mp4\n-rw-r--r-- 1 lukas staff 1024193 15 Apr 13:39 compact_monitor_1_1776249553464.mp4\n-rw-r--r-- 1 lukas staff 1965175 15 Apr 13:44 compact_monitor_1_1776249871482.mp4\n-rw-r--r-- 1 lukas staff 942071 15 Apr 13:49 compact_monitor_1_1776250182641.mp4\n-rw-r--r-- 1 lukas staff 1036861 15 Apr 13:55 compact_monitor_1_1776250503790.mp4\n-rw-r--r-- 1 lukas staff 1084939 15 Apr 14:00 compact_monitor_1_1776250829184.mp4\n-rw-r--r-- 1 lukas staff 1137305 15 Apr 14:05 compact_monitor_1_1776251148270.mp4\n-rw-r--r-- 1 lukas staff 1084917 15 Apr 14:13 compact_monitor_1_1776251623899.mp4\n-rw-r--r-- 1 lukas staff 472006 15 Apr 14:18 compact_monitor_1_1776251937854.mp4\n-rw-r--r-- 1 lukas staff 2195675 15 Apr 14:24 compact_monitor_1_1776252241210.mp4\n-rw-r--r-- 1 lukas staff 2126366 15 Apr 14:29 compact_monitor_1_1776252546881.mp4\n-rw-r--r-- 1 lukas staff 1223098 15 Apr 14:34 compact_monitor_1_1776252863758.mp4\n-rw-r--r-- 1 lukas staff 1554811 15 Apr 14:39 compact_monitor_1_1776253185709.mp4\n-rw-r--r-- 1 lukas staff 283980 15 Apr 14:39 compact_monitor_1_1776253191237.mp4\n-rw-r--r-- 1 lukas staff 1004738 15 Apr 14:45 compact_monitor_1_1776253502852.mp4\n-rw-r--r-- 1 lukas staff 1007213 15 Apr 14:50 compact_monitor_1_1776253806491.mp4\n-rw-r--r-- 1 lukas staff 1622820 15 Apr 14:55 compact_monitor_1_1776254109375.mp4\n-rw-r--r-- 1 lukas staff 1800819 15 Apr 15:00 compact_monitor_1_1776254415281.mp4\n-rw-r--r-- 1 lukas staff 1248853 15 Apr 15:05 compact_monitor_1_1776254720441.mp4\n-rw-r--r-- 1 lukas staff 1358099 15 Apr 15:10 compact_monitor_1_1776255026922.mp4\n-rw-r--r-- 1 lukas staff 1077547 15 Apr 15:15 compact_monitor_1_1776255334430.mp4\n-rw-r--r-- 1 lukas staff 1194727 15 Apr 15:20 compact_monitor_1_1776255638369.mp4\n-rw-r--r-- 1 lukas staff 1312132 15 Apr 15:25 compact_monitor_1_1776255944046.mp4\n-rw-r--r-- 1 lukas staff 2526518 15 Apr 15:30 compact_monitor_1_1776256247989.mp4\n-rw-r--r-- 1 lukas staff 2591568 15 Apr 15:35 compact_monitor_1_1776256553209.mp4\n-rw-r--r-- 1 lukas staff 347132 15 Apr 15:41 compact_monitor_1_1776256862331.mp4\n-rw-r--r-- 1 lukas staff 331422 15 Apr 15:46 compact_monitor_1_1776257183524.mp4\n-rw-r--r-- 1 lukas staff 1507338 15 Apr 15:51 compact_monitor_1_1776257499295.mp4\n-rw-r--r-- 1 lukas staff 1080123 15 Apr 15:57 compact_monitor_1_1776257818639.mp4\n-rw-r--r-- 1 lukas staff 1048617 15 Apr 16:02 compact_monitor_1_1776258139836.mp4\n-rw-r--r-- 1 lukas staff 1151460 15 Apr 16:07 compact_monitor_1_1776258462628.mp4\n-rw-r--r-- 1 lukas staff 1206649 15 Apr 16:13 compact_monitor_1_1776258784114.mp4\n-rw-r--r-- 1 lukas staff 1133984 15 Apr 16:18 compact_monitor_1_1776259107952.mp4\n-rw-r--r-- 1 lukas staff 1142984 15 Apr 16:23 compact_monitor_1_1776259433131.mp4\n-rw-r--r-- 1 lukas staff 1253153 15 Apr 16:29 compact_monitor_1_1776259757534.mp4\n-rw-r--r-- 1 lukas staff 998310 15 Apr 16:34 compact_monitor_1_1776260076664.mp4\n-rw-r--r-- 1 lukas staff 1065076 15 Apr 16:40 compact_monitor_1_1776260397335.mp4\n-rw-r--r-- 1 lukas staff 1099220 15 Apr 16:45 compact_monitor_1_1776260721850.mp4\n-rw-r--r-- 1 lukas staff 1154961 15 Apr 16:50 compact_monitor_1_1776261044836.mp4\n-rw-r--r-- 1 lukas staff 1065431 15 Apr 16:56 compact_monitor_1_1776261372103.mp4\n-rw-r--r-- 1 lukas staff 984542 15 Apr 17:01 compact_monitor_1_1776261696699.mp4\n-rw-r--r-- 1 lukas staff 451220 15 Apr 17:01 compact_monitor_1_1776261702497.mp4\n-rw-r--r-- 1 lukas staff 1211676 15 Apr 17:07 compact_monitor_1_1776262024768.mp4\n-rw-r--r-- 1 lukas staff 1161330 15 Apr 17:12 compact_monitor_1_1776262344982.mp4\n-rw-r--r-- 1 lukas staff 1052573 15 Apr 17:17 compact_monitor_1_1776262664755.mp4\n-rw-r--r-- 1 lukas staff 418716 15 Apr 17:17 compact_monitor_1_1776262670708.mp4\n-rw-r--r-- 1 lukas staff 1682982 15 Apr 17:23 compact_monitor_1_1776262992301.mp4\n-rw-r--r-- 1 lukas staff 1073481 15 Apr 17:28 compact_monitor_1_1776263309511.mp4\n-rw-r--r-- 1 lukas staff 1192672 15 Apr 17:34 compact_monitor_1_1776263636829.mp4\n-rw-r--r-- 1 lukas staff 383279 15 Apr 17:34 compact_monitor_1_1776263642876.mp4\n-rw-r--r-- 1 lukas staff 1357937 15 Apr 17:39 compact_monitor_1_1776263965549.mp4\n-rw-r--r-- 1 lukas staff 1057912 15 Apr 17:44 compact_monitor_1_1776264293030.mp4\n-rw-r--r-- 1 lukas staff 1055882 15 Apr 17:50 compact_monitor_1_1776264619470.mp4\n-rw-r--r-- 1 lukas staff 1173057 15 Apr 17:55 compact_monitor_1_1776264946265.mp4\n-rw-r--r-- 1 lukas staff 1162002 15 Apr 18:01 compact_monitor_1_1776265273041.mp4\n-rw-r--r-- 1 lukas staff 410666 15 Apr 18:01 compact_monitor_1_1776265279242.mp4\n-rw-r--r-- 1 lukas staff 1213530 15 Apr 18:06 compact_monitor_1_1776265602616.mp4\n-rw-r--r-- 1 lukas staff 1210935 15 Apr 18:12 compact_monitor_1_1776265929948.mp4\n-rw-r--r-- 1 lukas staff 355364 15 Apr 18:12 compact_monitor_1_1776265935884.mp4\n-rw-r--r-- 1 lukas staff 985021 15 Apr 18:17 compact_monitor_1_1776266259356.mp4\n-rw-r--r-- 1 lukas staff 448474 15 Apr 18:17 compact_monitor_1_1776266265353.mp4\n-rw-r--r-- 1 lukas staff 1007624 15 Apr 18:23 compact_monitor_1_1776266587803.mp4\n-rw-r--r-- 1 lukas staff 417702 15 Apr 18:23 compact_monitor_1_1776266593821.mp4\n-rw-r--r-- 1 lukas staff 3815275 15 Apr 10:09 compact_monitor_2_1776236981488.mp4\n-rw-r--r-- 1 lukas staff 3854792 15 Apr 10:14 compact_monitor_2_1776237291726.mp4\n-rw-r--r-- 1 lukas staff 367131 15 Apr 10:19 compact_monitor_2_1776237598300.mp4\n-rw-r--r-- 1 lukas staff 3965510 15 Apr 10:25 compact_monitor_2_1776237902921.mp4\n-rw-r--r-- 1 lukas staff 468839 15 Apr 10:30 compact_monitor_2_1776238211071.mp4\n-rw-r--r-- 1 lukas staff 395077 15 Apr 10:35 compact_monitor_2_1776238514343.mp4\n-rw-r--r-- 1 lukas staff 1309545 15 Apr 10:40 compact_monitor_2_1776238819191.mp4\n-rw-r--r-- 1 lukas staff 2579871 15 Apr 10:45 compact_monitor_2_1776239125548.mp4\n-rw-r--r-- 1 lukas staff 2261244 15 Apr 10:50 compact_monitor_2_1776239432484.mp4\n-rw-r--r-- 1 lukas staff 1614099 15 Apr 10:55 compact_monitor_2_1776239738314.mp4\n-rw-r--r-- 1 lukas staff 1396501 15 Apr 11:00 compact_monitor_2_1776240046668.mp4\n-rw-r--r-- 1 lukas staff 2608327 15 Apr 11:05 compact_monitor_2_1776240354465.mp4\n-rw-r--r-- 1 lukas staff 1343284 15 Apr 11:11 compact_monitor_2_1776240661129.mp4\n-rw-r--r-- 1 lukas staff 104083 15 Apr 11:16 compact_monitor_2_1776240965780.mp4\n-rw-r--r-- 1 lukas staff 1696225 15 Apr 11:21 compact_monitor_2_1776241269257.mp4\n-rw-r--r-- 1 lukas staff 3038037 15 Apr 11:26 compact_monitor_2_1776241574093.mp4\n-rw-r--r-- 1 lukas staff 2308673 15 Apr 11:31 compact_monitor_2_1776241879955.mp4\n-rw-r--r-- 1 lukas staff 3684492 15 Apr 11:36 compact_monitor_2_1776242185232.mp4\n-rw-r--r-- 1 lukas staff 1318134 15 Apr 11:41 compact_monitor_2_1776242490310.mp4\n-rw-r--r-- 1 lukas staff 2429835 15 Apr 11:46 compact_monitor_2_1776242794849.mp4\n-rw-r--r-- 1 lukas staff 760204 15 Apr 11:51 compact_monitor_2_1776243100430.mp4\n-rw-r--r-- 1 lukas staff 2563357 15 Apr 11:56 compact_monitor_2_1776243402772.mp4\n-rw-r--r-- 1 lukas staff 2270439 15 Apr 12:01 compact_monitor_2_1776243709288.mp4\n-rw-r--r-- 1 lukas staff 1591957 15 Apr 12:07 compact_monitor_2_1776244019480.mp4\n-rw-r--r-- 1 lukas staff 1448741 15 Apr 12:12 compact_monitor_2_1776244328555.mp4\n-rw-r--r-- 1 lukas staff 3297885 15 Apr 12:17 compact_monitor_2_1776244636345.mp4\n-rw-r--r-- 1 lukas staff 1088455 15 Apr 12:22 compact_monitor_2_1776244941048.mp4\n-rw-r--r-- 1 lukas staff 398901 15 Apr 12:27 compact_monitor_2_1776245243901.mp4\n-rw-r--r-- 1 lukas staff 1511792 15 Apr 12:32 compact_monitor_2_1776245547006.mp4\n-rw-r--r-- 1 lukas staff 1331771 15 Apr 12:37 compact_monitor_2_1776245852471.mp4\n-rw-r--r-- 1 lukas staff 923996 15 Apr 12:42 compact_monitor_2_1776246158613.mp4\n-rw-r--r-- 1 lukas staff 2568982 15 Apr 12:47 compact_monitor_2_1776246463035.mp4\n-rw-r--r-- 1 lukas staff 3313949 15 Apr 12:52 compact_monitor_2_1776246768685.mp4\n-rw-r--r-- 1 lukas staff 4771645 15 Apr 12:57 compact_monitor_2_1776247076079.mp4\n-rw-r--r-- 1 lukas staff 6586185 15 Apr 13:03 compact_monitor_2_1776247382530.mp4\n-rw-r--r-- 1 lukas staff 2358604 15 Apr 13:08 compact_monitor_2_1776247690007.mp4\n-rw-r--r-- 1 lukas staff 2980294 15 Apr 13:13 compact_monitor_2_1776247996783.mp4\n-rw-r--r-- 1 lukas staff 3036356 15 Apr 13:18 compact_monitor_2_1776248303327.mp4\n-rw-r--r-- 1 lukas staff 13739308 15 Apr 13:23 compact_monitor_2_1776248612102.mp4\n-rw-r--r-- 1 lukas staff 1792715 15 Apr 13:23 compact_monitor_2_1776248622198.mp4\n-rw-r--r-- 1 lukas staff 19438020 15 Apr 13:28 compact_monitor_2_1776248929123.mp4\n-rw-r--r-- 1 lukas staff 1542891 15 Apr 13:29 compact_monitor_2_1776248939710.mp4\n-rw-r--r-- 1 lukas staff 18764167 15 Apr 13:34 compact_monitor_2_1776249244616.mp4\n-rw-r--r-- 1 lukas staff 29428799 15 Apr 13:39 compact_monitor_2_1776249557895.mp4\n-rw-r--r-- 1 lukas staff 12512925 15 Apr 13:44 compact_monitor_2_1776249875231.mp4\n-rw-r--r-- 1 lukas staff 30936872 15 Apr 13:50 compact_monitor_2_1776250186990.mp4\n-rw-r--r-- 1 lukas staff 2793009 15 Apr 13:50 compact_monitor_2_1776250201560.mp4\n-rw-r--r-- 1 lukas staff 33052595 15 Apr 13:55 compact_monitor_2_1776250510466.mp4\n-rw-r--r-- 1 lukas staff 8811443 15 Apr 13:55 compact_monitor_2_1776250525325.mp4\n-rw-r--r-- 1 lukas staff 36732130 15 Apr 14:00 compact_monitor_2_1776250833909.mp4\n-rw-r--r-- 1 lukas staff 808116 15 Apr 14:00 compact_monitor_2_1776250847678.mp4\n-rw-r--r-- 1 lukas staff 35963507 15 Apr 14:06 compact_monitor_2_1776251153283.mp4\n-rw-r--r-- 1 lukas staff 17255576 15 Apr 14:13 compact_monitor_2_1776251627877.mp4\n-rw-r--r-- 1 lukas staff 217409 15 Apr 14:18 compact_monitor_2_1776251938719.mp4\n-rw-r--r-- 1 lukas staff 2179896 15 Apr 14:24 compact_monitor_2_1776252243501.mp4\n-rw-r--r-- 1 lukas staff 24202787 15 Apr 14:29 compact_monitor_2_1776252550645.mp4\n-rw-r--r-- 1 lukas staff 40541441 15 Apr 14:34 compact_monitor_2_1776252869026.mp4\n-rw-r--r-- 1 lukas staff 1969819 15 Apr 14:34 compact_monitor_2_1776252884388.mp4\n-rw-r--r-- 1 lukas staff 26185693 15 Apr 14:40 compact_monitor_2_1776253191567.mp4\n-rw-r--r-- 1 lukas staff 2958445 15 Apr 14:45 compact_monitor_2_1776253504333.mp4\n-rw-r--r-- 1 lukas staff 1721625 15 Apr 14:50 compact_monitor_2_1776253807794.mp4\n-rw-r--r-- 1 lukas staff 5168799 15 Apr 14:55 compact_monitor_2_1776254111721.mp4\n-rw-r--r-- 1 lukas staff 1008125 15 Apr 15:00 compact_monitor_2_1776254418941.mp4\n-rw-r--r-- 1 lukas staff 2805751 15 Apr 15:05 compact_monitor_2_1776254723846.mp4\n-rw-r--r-- 1 lukas staff 4263256 15 Apr 15:10 compact_monitor_2_1776255030878.mp4\n-rw-r--r-- 1 lukas staff 1855151 15 Apr 15:15 compact_monitor_2_1776255336562.mp4\n-rw-r--r-- 1 lukas staff 1068172 15 Apr 15:20 compact_monitor_2_1776255640728.mp4\n-rw-r--r-- 1 lukas staff 393423 15 Apr 15:25 compact_monitor_2_1776255946991.mp4\n-rw-r--r-- 1 lukas staff 1066924 15 Apr 15:30 compact_monitor_2_1776256250851.mp4\n-rw-r--r-- 1 lukas staff 4522183 15 Apr 15:36 compact_monitor_2_1776256557162.mp4\n-rw-r--r-- 1 lukas staff 21285442 15 Apr 15:41 compact_monitor_2_1776256868069.mp4\n-rw-r--r-- 1 lukas staff 4799464 15 Apr 15:41 compact_monitor_2_1776256880438.mp4\n-rw-r--r-- 1 lukas staff 25082442 15 Apr 15:46 compact_monitor_2_1776257187591.mp4\n-rw-r--r-- 1 lukas staff 29377114 15 Apr 15:51 compact_monitor_2_1776257503657.mp4\n-rw-r--r-- 1 lukas staff 2577148 15 Apr 15:51 compact_monitor_2_1776257516759.mp4\n-rw-r--r-- 1 lukas staff 35197312 15 Apr 15:57 compact_monitor_2_1776257823244.mp4\n-rw-r--r-- 1 lukas staff 739380 15 Apr 15:57 compact_monitor_2_1776257838858.mp4\n-rw-r--r-- 1 lukas staff 39595503 15 Apr 16:02 compact_monitor_2_1776258144789.mp4\n-rw-r--r-- 1 lukas staff 2671413 15 Apr 16:02 compact_monitor_2_1776258160717.mp4\n-rw-r--r-- 1 lukas staff 33576004 15 Apr 16:08 compact_monitor_2_1776258467332.mp4\n-rw-r--r-- 1 lukas staff 3404945 15 Apr 16:08 compact_monitor_2_1776258481869.mp4\n-rw-r--r-- 1 lukas staff 36386887 15 Apr 16:13 compact_monitor_2_1776258789278.mp4\n-rw-r--r-- 1 lukas staff 2717076 15 Apr 16:13 compact_monitor_2_1776258804257.mp4\n-rw-r--r-- 1 lukas staff 38542946 15 Apr 16:18 compact_monitor_2_1776259112717.mp4\n-rw-r--r-- 1 lukas staff 6480087 15 Apr 16:18 compact_monitor_2_1776259128284.mp4\n-rw-r--r-- 1 lukas staff 39076466 15 Apr 16:24 compact_monitor_2_1776259438063.mp4\n-rw-r--r-- 1 lukas staff 4361748 15 Apr 16:24 compact_monitor_2_1776259453552.mp4\n-rw-r--r-- 1 lukas staff 30743109 15 Apr 16:29 compact_monitor_2_1776259762038.mp4\n-rw-r--r-- 1 lukas staff 35230072 15 Apr 16:34 compact_monitor_2_1776260081207.mp4\n-rw-r--r-- 1 lukas staff 44719930 15 Apr 16:40 compact_monitor_2_1776260402183.mp4\n-rw-r--r-- 1 lukas staff 40699319 15 Apr 16:45 compact_monitor_2_1776260727063.mp4\n-rw-r--r-- 1 lukas staff 40175062 15 Apr 16:51 compact_monitor_2_1776261051104.mp4\n-rw-r--r-- 1 lukas staff 10100456 15 Apr 16:51 compact_monitor_2_1776261066254.mp4\n-rw-r--r-- 1 lukas staff 40218171 15 Apr 16:56 compact_monitor_2_1776261377240.mp4\n-rw-r--r-- 1 lukas staff 10164441 15 Apr 16:56 compact_monitor_2_1776261392293.mp4\n-rw-r--r-- 1 lukas staff 39679757 15 Apr 17:01 compact_monitor_2_1776261703501.mp4\n-rw-r--r-- 1 lukas staff 16362780 15 Apr 17:02 compact_monitor_2_1776261718068.mp4\n-rw-r--r-- 1 lukas staff 35673196 15 Apr 17:07 compact_monitor_2_1776262030308.mp4\n-rw-r--r-- 1 lukas staff 418425 15 Apr 17:07 compact_monitor_2_1776262044183.mp4\n-rw-r--r-- 1 lukas staff 38695493 15 Apr 17:12 compact_monitor_2_1776262350156.mp4\n-rw-r--r-- 1 lukas staff 41039121 15 Apr 17:18 compact_monitor_2_1776262671510.mp4\n-rw-r--r-- 1 lukas staff 14440675 15 Apr 17:18 compact_monitor_2_1776262686451.mp4\n-rw-r--r-- 1 lukas staff 29155784 15 Apr 17:23 compact_monitor_2_1776262997519.mp4\n-rw-r--r-- 1 lukas staff 38013561 15 Apr 17:28 compact_monitor_2_1776263315513.mp4\n-rw-r--r-- 1 lukas staff 13728546 15 Apr 17:28 compact_monitor_2_1776263330175.mp4\n-rw-r--r-- 1 lukas staff 42282890 15 Apr 17:34 compact_monitor_2_1776263643561.mp4\n-rw-r--r-- 1 lukas staff 15975636 15 Apr 17:34 compact_monitor_2_1776263659153.mp4\n-rw-r--r-- 1 lukas staff 42361074 15 Apr 17:39 compact_monitor_2_1776263971167.mp4\n-rw-r--r-- 1 lukas staff 12206045 15 Apr 17:39 compact_monitor_2_1776263987012.mp4\n-rw-r--r-- 1 lukas staff 46367818 15 Apr 17:45 compact_monitor_2_1776264298000.mp4\n-rw-r--r-- 1 lukas staff 8981811 15 Apr 17:45 compact_monitor_2_1776264315186.mp4\n-rw-r--r-- 1 lukas staff 39268566 15 Apr 17:50 compact_monitor_2_1776264625122.mp4\n-rw-r--r-- 1 lukas staff 14427002 15 Apr 17:50 compact_monitor_2_1776264640284.mp4\n-rw-r--r-- 1 lukas staff 39524622 15 Apr 17:56 compact_monitor_2_1776264952043.mp4\n-rw-r--r-- 1 lukas staff 12413344 15 Apr 17:56 compact_monitor_2_1776264966984.mp4\n-rw-r--r-- 1 lukas staff 37530622 15 Apr 18:01 compact_monitor_2_1776265280164.mp4\n-rw-r--r-- 1 lukas staff 16392257 15 Apr 18:01 compact_monitor_2_1776265294548.mp4\n-rw-r--r-- 1 lukas staff 43552334 15 Apr 18:07 compact_monitor_2_1776265608065.mp4\n-rw-r--r-- 1 lukas staff 6335856 15 Apr 18:07 compact_monitor_2_1776265624847.mp4\n-rw-r--r-- 1 lukas staff 40102732 15 Apr 18:12 compact_monitor_2_1776265936487.mp4\n-rw-r--r-- 1 lukas staff 10852075 15 Apr 18:12 compact_monitor_2_1776265950996.mp4\n-rw-r--r-- 1 lukas staff 33010772 15 Apr 18:17 compact_monitor_2_1776266266304.mp4\n-rw-r--r-- 1 lukas staff 12302090 15 Apr 18:18 compact_monitor_2_1776266279297.mp4\n-rw-r--r-- 1 lukas staff 37997133 15 Apr 18:23 compact_monitor_2_1776266594590.mp4\n-rw-r--r-- 1 lukas staff 13660744 15 Apr 18:23 compact_monitor_2_1776266608276.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-15 $","depth":4,"value":"-rw-r--r-- 1 lukas staff 208823 15 Apr 18:24 1776266649991_m1.jpg\n-rw-r--r-- 1 lukas staff 677743 15 Apr 18:24 1776266649991_m2.jpg\n-rw-r--r-- 1 lukas staff 285273 15 Apr 18:24 1776266655380_m2.jpg\n-rw-r--r-- 1 lukas staff 208338 15 Apr 18:24 1776266656348_m1.jpg\n-rw-r--r-- 1 lukas staff 299758 15 Apr 18:24 1776266657887_m2.jpg\n-rw-r--r-- 1 lukas staff 208905 15 Apr 18:24 1776266660014_m1.jpg\n-rw-r--r-- 1 lukas staff 505543 15 Apr 18:24 1776266660357_m2.jpg\n-rw-r--r-- 1 lukas staff 130773 15 Apr 18:24 1776266662583_m2.jpg\n-rw-r--r-- 1 lukas staff 208837 15 Apr 18:24 1776266662590_m1.jpg\n-rw-r--r-- 1 lukas staff 131262 15 Apr 18:24 1776266665030_m2.jpg\n-rw-r--r-- 1 lukas staff 208543 15 Apr 18:24 1776266665178_m1.jpg\n-rw-r--r-- 1 lukas staff 82600 15 Apr 18:24 1776266668094_m2.jpg\n-rw-r--r-- 1 lukas staff 99799 15 Apr 18:24 1776266671070_m2.jpg\n-rw-r--r-- 1 lukas staff 209265 15 Apr 18:24 1776266671742_m1.jpg\n-rw-r--r-- 1 lukas staff 69569 15 Apr 18:24 1776266672855_m2.jpg\n-rw-r--r-- 1 lukas staff 233878 15 Apr 18:24 1776266675463_m2.jpg\n-rw-r--r-- 1 lukas staff 233944 15 Apr 18:24 1776266676686_m2.jpg\n-rw-r--r-- 1 lukas staff 208529 15 Apr 18:24 1776266676718_m1.jpg\n-rw-r--r-- 1 lukas staff 208411 15 Apr 18:24 1776266678430_m1.jpg\n-rw-r--r-- 1 lukas staff 275989 15 Apr 18:24 1776266678431_m2.jpg\n-rw-r--r-- 1 lukas staff 258903 15 Apr 18:24 1776266679106_m2.jpg\n-rw-r--r-- 1 lukas staff 278951 15 Apr 18:24 1776266682164_m2.jpg\n-rw-r--r-- 1 lukas staff 208465 15 Apr 18:24 1776266687272_m1.jpg\n-rw-r--r-- 1 lukas staff 208398 15 Apr 18:24 1776266690323_m1.jpg\n-rw-r--r-- 1 lukas staff 273693 15 Apr 18:24 1776266691227_m2.jpg\n-rw-r--r-- 1 lukas staff 185943 15 Apr 18:24 1776266696382_m1.jpg\n-rw-r--r-- 1 lukas staff 271869 15 Apr 18:24 1776266697274_m2.jpg\n-rw-r--r-- 1 lukas staff 366699 15 Apr 18:25 1776266705465_m1.jpg\n-rw-r--r-- 1 lukas staff 186079 15 Apr 18:25 1776266708505_m1.jpg\n-rw-r--r-- 1 lukas staff 1292480 15 Apr 10:09 compact_monitor_1_1776236979346.mp4\n-rw-r--r-- 1 lukas staff 6304039 15 Apr 10:14 compact_monitor_1_1776237284692.mp4\n-rw-r--r-- 1 lukas staff 2514313 15 Apr 10:19 compact_monitor_1_1776237595554.mp4\n-rw-r--r-- 1 lukas staff 2821904 15 Apr 10:25 compact_monitor_1_1776237899635.mp4\n-rw-r--r-- 1 lukas staff 2785297 15 Apr 10:30 compact_monitor_1_1776238207393.mp4\n-rw-r--r-- 1 lukas staff 1639472 15 Apr 10:35 compact_monitor_1_1776238512537.mp4\n-rw-r--r-- 1 lukas staff 3207933 15 Apr 10:40 compact_monitor_1_1776238815528.mp4\n-rw-r--r-- 1 lukas staff 3594658 15 Apr 10:45 compact_monitor_1_1776239122381.mp4\n-rw-r--r-- 1 lukas staff 3671517 15 Apr 10:50 compact_monitor_1_1776239429225.mp4\n-rw-r--r-- 1 lukas staff 4031948 15 Apr 10:55 compact_monitor_1_1776239734998.mp4\n-rw-r--r-- 1 lukas staff 3529461 15 Apr 11:00 compact_monitor_1_1776240042925.mp4\n-rw-r--r-- 1 lukas staff 5234845 15 Apr 11:05 compact_monitor_1_1776240349311.mp4\n-rw-r--r-- 1 lukas staff 3323085 15 Apr 11:11 compact_monitor_1_1776240657823.mp4\n-rw-r--r-- 1 lukas staff 2204215 15 Apr 11:16 compact_monitor_1_1776240963306.mp4\n-rw-r--r-- 1 lukas staff 2387534 15 Apr 11:21 compact_monitor_1_1776241266776.mp4\n-rw-r--r-- 1 lukas staff 4921676 15 Apr 11:26 compact_monitor_1_1776241570939.mp4\n-rw-r--r-- 1 lukas staff 2135612 15 Apr 11:31 compact_monitor_1_1776241878162.mp4\n-rw-r--r-- 1 lukas staff 494014 15 Apr 11:36 compact_monitor_1_1776242182944.mp4\n-rw-r--r-- 1 lukas staff 1986658 15 Apr 11:41 compact_monitor_1_1776242488565.mp4\n-rw-r--r-- 1 lukas staff 1651327 15 Apr 11:46 compact_monitor_1_1776242792386.mp4\n-rw-r--r-- 1 lukas staff 190056 15 Apr 11:51 compact_monitor_1_1776243099454.mp4\n-rw-r--r-- 1 lukas staff 489195 15 Apr 11:56 compact_monitor_1_1776243401560.mp4\n-rw-r--r-- 1 lukas staff 637245 15 Apr 12:01 compact_monitor_1_1776243707339.mp4\n-rw-r--r-- 1 lukas staff 836102 15 Apr 12:06 compact_monitor_1_1776244016111.mp4\n-rw-r--r-- 1 lukas staff 2250311 15 Apr 12:12 compact_monitor_1_1776244325248.mp4\n-rw-r--r-- 1 lukas staff 4438961 15 Apr 12:17 compact_monitor_1_1776244633485.mp4\n-rw-r--r-- 1 lukas staff 2024811 15 Apr 12:22 compact_monitor_1_1776244939105.mp4\n-rw-r--r-- 1 lukas staff 1140502 15 Apr 12:27 compact_monitor_1_1776245242576.mp4\n-rw-r--r-- 1 lukas staff 818870 15 Apr 12:32 compact_monitor_1_1776245545145.mp4\n-rw-r--r-- 1 lukas staff 506104 15 Apr 12:37 compact_monitor_1_1776245850845.mp4\n-rw-r--r-- 1 lukas staff 506372 15 Apr 12:42 compact_monitor_1_1776246157330.mp4\n-rw-r--r-- 1 lukas staff 585365 15 Apr 12:47 compact_monitor_1_1776246461621.mp4\n-rw-r--r-- 1 lukas staff 1536187 15 Apr 12:52 compact_monitor_1_1776246766463.mp4\n-rw-r--r-- 1 lukas staff 2825443 15 Apr 12:57 compact_monitor_1_1776247072489.mp4\n-rw-r--r-- 1 lukas staff 3094796 15 Apr 13:03 compact_monitor_1_1776247379957.mp4\n-rw-r--r-- 1 lukas staff 396633 15 Apr 13:08 compact_monitor_1_1776247688246.mp4\n-rw-r--r-- 1 lukas staff 909684 15 Apr 13:13 compact_monitor_1_1776247993728.mp4\n-rw-r--r-- 1 lukas staff 1577484 15 Apr 13:18 compact_monitor_1_1776248301121.mp4\n-rw-r--r-- 1 lukas staff 1079237 15 Apr 13:23 compact_monitor_1_1776248607315.mp4\n-rw-r--r-- 1 lukas staff 1091368 15 Apr 13:28 compact_monitor_1_1776248924298.mp4\n-rw-r--r-- 1 lukas staff 925798 15 Apr 13:34 compact_monitor_1_1776249241863.mp4\n-rw-r--r-- 1 lukas staff 1024193 15 Apr 13:39 compact_monitor_1_1776249553464.mp4\n-rw-r--r-- 1 lukas staff 1965175 15 Apr 13:44 compact_monitor_1_1776249871482.mp4\n-rw-r--r-- 1 lukas staff 942071 15 Apr 13:49 compact_monitor_1_1776250182641.mp4\n-rw-r--r-- 1 lukas staff 1036861 15 Apr 13:55 compact_monitor_1_1776250503790.mp4\n-rw-r--r-- 1 lukas staff 1084939 15 Apr 14:00 compact_monitor_1_1776250829184.mp4\n-rw-r--r-- 1 lukas staff 1137305 15 Apr 14:05 compact_monitor_1_1776251148270.mp4\n-rw-r--r-- 1 lukas staff 1084917 15 Apr 14:13 compact_monitor_1_1776251623899.mp4\n-rw-r--r-- 1 lukas staff 472006 15 Apr 14:18 compact_monitor_1_1776251937854.mp4\n-rw-r--r-- 1 lukas staff 2195675 15 Apr 14:24 compact_monitor_1_1776252241210.mp4\n-rw-r--r-- 1 lukas staff 2126366 15 Apr 14:29 compact_monitor_1_1776252546881.mp4\n-rw-r--r-- 1 lukas staff 1223098 15 Apr 14:34 compact_monitor_1_1776252863758.mp4\n-rw-r--r-- 1 lukas staff 1554811 15 Apr 14:39 compact_monitor_1_1776253185709.mp4\n-rw-r--r-- 1 lukas staff 283980 15 Apr 14:39 compact_monitor_1_1776253191237.mp4\n-rw-r--r-- 1 lukas staff 1004738 15 Apr 14:45 compact_monitor_1_1776253502852.mp4\n-rw-r--r-- 1 lukas staff 1007213 15 Apr 14:50 compact_monitor_1_1776253806491.mp4\n-rw-r--r-- 1 lukas staff 1622820 15 Apr 14:55 compact_monitor_1_1776254109375.mp4\n-rw-r--r-- 1 lukas staff 1800819 15 Apr 15:00 compact_monitor_1_1776254415281.mp4\n-rw-r--r-- 1 lukas staff 1248853 15 Apr 15:05 compact_monitor_1_1776254720441.mp4\n-rw-r--r-- 1 lukas staff 1358099 15 Apr 15:10 compact_monitor_1_1776255026922.mp4\n-rw-r--r-- 1 lukas staff 1077547 15 Apr 15:15 compact_monitor_1_1776255334430.mp4\n-rw-r--r-- 1 lukas staff 1194727 15 Apr 15:20 compact_monitor_1_1776255638369.mp4\n-rw-r--r-- 1 lukas staff 1312132 15 Apr 15:25 compact_monitor_1_1776255944046.mp4\n-rw-r--r-- 1 lukas staff 2526518 15 Apr 15:30 compact_monitor_1_1776256247989.mp4\n-rw-r--r-- 1 lukas staff 2591568 15 Apr 15:35 compact_monitor_1_1776256553209.mp4\n-rw-r--r-- 1 lukas staff 347132 15 Apr 15:41 compact_monitor_1_1776256862331.mp4\n-rw-r--r-- 1 lukas staff 331422 15 Apr 15:46 compact_monitor_1_1776257183524.mp4\n-rw-r--r-- 1 lukas staff 1507338 15 Apr 15:51 compact_monitor_1_1776257499295.mp4\n-rw-r--r-- 1 lukas staff 1080123 15 Apr 15:57 compact_monitor_1_1776257818639.mp4\n-rw-r--r-- 1 lukas staff 1048617 15 Apr 16:02 compact_monitor_1_1776258139836.mp4\n-rw-r--r-- 1 lukas staff 1151460 15 Apr 16:07 compact_monitor_1_1776258462628.mp4\n-rw-r--r-- 1 lukas staff 1206649 15 Apr 16:13 compact_monitor_1_1776258784114.mp4\n-rw-r--r-- 1 lukas staff 1133984 15 Apr 16:18 compact_monitor_1_1776259107952.mp4\n-rw-r--r-- 1 lukas staff 1142984 15 Apr 16:23 compact_monitor_1_1776259433131.mp4\n-rw-r--r-- 1 lukas staff 1253153 15 Apr 16:29 compact_monitor_1_1776259757534.mp4\n-rw-r--r-- 1 lukas staff 998310 15 Apr 16:34 compact_monitor_1_1776260076664.mp4\n-rw-r--r-- 1 lukas staff 1065076 15 Apr 16:40 compact_monitor_1_1776260397335.mp4\n-rw-r--r-- 1 lukas staff 1099220 15 Apr 16:45 compact_monitor_1_1776260721850.mp4\n-rw-r--r-- 1 lukas staff 1154961 15 Apr 16:50 compact_monitor_1_1776261044836.mp4\n-rw-r--r-- 1 lukas staff 1065431 15 Apr 16:56 compact_monitor_1_1776261372103.mp4\n-rw-r--r-- 1 lukas staff 984542 15 Apr 17:01 compact_monitor_1_1776261696699.mp4\n-rw-r--r-- 1 lukas staff 451220 15 Apr 17:01 compact_monitor_1_1776261702497.mp4\n-rw-r--r-- 1 lukas staff 1211676 15 Apr 17:07 compact_monitor_1_1776262024768.mp4\n-rw-r--r-- 1 lukas staff 1161330 15 Apr 17:12 compact_monitor_1_1776262344982.mp4\n-rw-r--r-- 1 lukas staff 1052573 15 Apr 17:17 compact_monitor_1_1776262664755.mp4\n-rw-r--r-- 1 lukas staff 418716 15 Apr 17:17 compact_monitor_1_1776262670708.mp4\n-rw-r--r-- 1 lukas staff 1682982 15 Apr 17:23 compact_monitor_1_1776262992301.mp4\n-rw-r--r-- 1 lukas staff 1073481 15 Apr 17:28 compact_monitor_1_1776263309511.mp4\n-rw-r--r-- 1 lukas staff 1192672 15 Apr 17:34 compact_monitor_1_1776263636829.mp4\n-rw-r--r-- 1 lukas staff 383279 15 Apr 17:34 compact_monitor_1_1776263642876.mp4\n-rw-r--r-- 1 lukas staff 1357937 15 Apr 17:39 compact_monitor_1_1776263965549.mp4\n-rw-r--r-- 1 lukas staff 1057912 15 Apr 17:44 compact_monitor_1_1776264293030.mp4\n-rw-r--r-- 1 lukas staff 1055882 15 Apr 17:50 compact_monitor_1_1776264619470.mp4\n-rw-r--r-- 1 lukas staff 1173057 15 Apr 17:55 compact_monitor_1_1776264946265.mp4\n-rw-r--r-- 1 lukas staff 1162002 15 Apr 18:01 compact_monitor_1_1776265273041.mp4\n-rw-r--r-- 1 lukas staff 410666 15 Apr 18:01 compact_monitor_1_1776265279242.mp4\n-rw-r--r-- 1 lukas staff 1213530 15 Apr 18:06 compact_monitor_1_1776265602616.mp4\n-rw-r--r-- 1 lukas staff 1210935 15 Apr 18:12 compact_monitor_1_1776265929948.mp4\n-rw-r--r-- 1 lukas staff 355364 15 Apr 18:12 compact_monitor_1_1776265935884.mp4\n-rw-r--r-- 1 lukas staff 985021 15 Apr 18:17 compact_monitor_1_1776266259356.mp4\n-rw-r--r-- 1 lukas staff 448474 15 Apr 18:17 compact_monitor_1_1776266265353.mp4\n-rw-r--r-- 1 lukas staff 1007624 15 Apr 18:23 compact_monitor_1_1776266587803.mp4\n-rw-r--r-- 1 lukas staff 417702 15 Apr 18:23 compact_monitor_1_1776266593821.mp4\n-rw-r--r-- 1 lukas staff 3815275 15 Apr 10:09 compact_monitor_2_1776236981488.mp4\n-rw-r--r-- 1 lukas staff 3854792 15 Apr 10:14 compact_monitor_2_1776237291726.mp4\n-rw-r--r-- 1 lukas staff 367131 15 Apr 10:19 compact_monitor_2_1776237598300.mp4\n-rw-r--r-- 1 lukas staff 3965510 15 Apr 10:25 compact_monitor_2_1776237902921.mp4\n-rw-r--r-- 1 lukas staff 468839 15 Apr 10:30 compact_monitor_2_1776238211071.mp4\n-rw-r--r-- 1 lukas staff 395077 15 Apr 10:35 compact_monitor_2_1776238514343.mp4\n-rw-r--r-- 1 lukas staff 1309545 15 Apr 10:40 compact_monitor_2_1776238819191.mp4\n-rw-r--r-- 1 lukas staff 2579871 15 Apr 10:45 compact_monitor_2_1776239125548.mp4\n-rw-r--r-- 1 lukas staff 2261244 15 Apr 10:50 compact_monitor_2_1776239432484.mp4\n-rw-r--r-- 1 lukas staff 1614099 15 Apr 10:55 compact_monitor_2_1776239738314.mp4\n-rw-r--r-- 1 lukas staff 1396501 15 Apr 11:00 compact_monitor_2_1776240046668.mp4\n-rw-r--r-- 1 lukas staff 2608327 15 Apr 11:05 compact_monitor_2_1776240354465.mp4\n-rw-r--r-- 1 lukas staff 1343284 15 Apr 11:11 compact_monitor_2_1776240661129.mp4\n-rw-r--r-- 1 lukas staff 104083 15 Apr 11:16 compact_monitor_2_1776240965780.mp4\n-rw-r--r-- 1 lukas staff 1696225 15 Apr 11:21 compact_monitor_2_1776241269257.mp4\n-rw-r--r-- 1 lukas staff 3038037 15 Apr 11:26 compact_monitor_2_1776241574093.mp4\n-rw-r--r-- 1 lukas staff 2308673 15 Apr 11:31 compact_monitor_2_1776241879955.mp4\n-rw-r--r-- 1 lukas staff 3684492 15 Apr 11:36 compact_monitor_2_1776242185232.mp4\n-rw-r--r-- 1 lukas staff 1318134 15 Apr 11:41 compact_monitor_2_1776242490310.mp4\n-rw-r--r-- 1 lukas staff 2429835 15 Apr 11:46 compact_monitor_2_1776242794849.mp4\n-rw-r--r-- 1 lukas staff 760204 15 Apr 11:51 compact_monitor_2_1776243100430.mp4\n-rw-r--r-- 1 lukas staff 2563357 15 Apr 11:56 compact_monitor_2_1776243402772.mp4\n-rw-r--r-- 1 lukas staff 2270439 15 Apr 12:01 compact_monitor_2_1776243709288.mp4\n-rw-r--r-- 1 lukas staff 1591957 15 Apr 12:07 compact_monitor_2_1776244019480.mp4\n-rw-r--r-- 1 lukas staff 1448741 15 Apr 12:12 compact_monitor_2_1776244328555.mp4\n-rw-r--r-- 1 lukas staff 3297885 15 Apr 12:17 compact_monitor_2_1776244636345.mp4\n-rw-r--r-- 1 lukas staff 1088455 15 Apr 12:22 compact_monitor_2_1776244941048.mp4\n-rw-r--r-- 1 lukas staff 398901 15 Apr 12:27 compact_monitor_2_1776245243901.mp4\n-rw-r--r-- 1 lukas staff 1511792 15 Apr 12:32 compact_monitor_2_1776245547006.mp4\n-rw-r--r-- 1 lukas staff 1331771 15 Apr 12:37 compact_monitor_2_1776245852471.mp4\n-rw-r--r-- 1 lukas staff 923996 15 Apr 12:42 compact_monitor_2_1776246158613.mp4\n-rw-r--r-- 1 lukas staff 2568982 15 Apr 12:47 compact_monitor_2_1776246463035.mp4\n-rw-r--r-- 1 lukas staff 3313949 15 Apr 12:52 compact_monitor_2_1776246768685.mp4\n-rw-r--r-- 1 lukas staff 4771645 15 Apr 12:57 compact_monitor_2_1776247076079.mp4\n-rw-r--r-- 1 lukas staff 6586185 15 Apr 13:03 compact_monitor_2_1776247382530.mp4\n-rw-r--r-- 1 lukas staff 2358604 15 Apr 13:08 compact_monitor_2_1776247690007.mp4\n-rw-r--r-- 1 lukas staff 2980294 15 Apr 13:13 compact_monitor_2_1776247996783.mp4\n-rw-r--r-- 1 lukas staff 3036356 15 Apr 13:18 compact_monitor_2_1776248303327.mp4\n-rw-r--r-- 1 lukas staff 13739308 15 Apr 13:23 compact_monitor_2_1776248612102.mp4\n-rw-r--r-- 1 lukas staff 1792715 15 Apr 13:23 compact_monitor_2_1776248622198.mp4\n-rw-r--r-- 1 lukas staff 19438020 15 Apr 13:28 compact_monitor_2_1776248929123.mp4\n-rw-r--r-- 1 lukas staff 1542891 15 Apr 13:29 compact_monitor_2_1776248939710.mp4\n-rw-r--r-- 1 lukas staff 18764167 15 Apr 13:34 compact_monitor_2_1776249244616.mp4\n-rw-r--r-- 1 lukas staff 29428799 15 Apr 13:39 compact_monitor_2_1776249557895.mp4\n-rw-r--r-- 1 lukas staff 12512925 15 Apr 13:44 compact_monitor_2_1776249875231.mp4\n-rw-r--r-- 1 lukas staff 30936872 15 Apr 13:50 compact_monitor_2_1776250186990.mp4\n-rw-r--r-- 1 lukas staff 2793009 15 Apr 13:50 compact_monitor_2_1776250201560.mp4\n-rw-r--r-- 1 lukas staff 33052595 15 Apr 13:55 compact_monitor_2_1776250510466.mp4\n-rw-r--r-- 1 lukas staff 8811443 15 Apr 13:55 compact_monitor_2_1776250525325.mp4\n-rw-r--r-- 1 lukas staff 36732130 15 Apr 14:00 compact_monitor_2_1776250833909.mp4\n-rw-r--r-- 1 lukas staff 808116 15 Apr 14:00 compact_monitor_2_1776250847678.mp4\n-rw-r--r-- 1 lukas staff 35963507 15 Apr 14:06 compact_monitor_2_1776251153283.mp4\n-rw-r--r-- 1 lukas staff 17255576 15 Apr 14:13 compact_monitor_2_1776251627877.mp4\n-rw-r--r-- 1 lukas staff 217409 15 Apr 14:18 compact_monitor_2_1776251938719.mp4\n-rw-r--r-- 1 lukas staff 2179896 15 Apr 14:24 compact_monitor_2_1776252243501.mp4\n-rw-r--r-- 1 lukas staff 24202787 15 Apr 14:29 compact_monitor_2_1776252550645.mp4\n-rw-r--r-- 1 lukas staff 40541441 15 Apr 14:34 compact_monitor_2_1776252869026.mp4\n-rw-r--r-- 1 lukas staff 1969819 15 Apr 14:34 compact_monitor_2_1776252884388.mp4\n-rw-r--r-- 1 lukas staff 26185693 15 Apr 14:40 compact_monitor_2_1776253191567.mp4\n-rw-r--r-- 1 lukas staff 2958445 15 Apr 14:45 compact_monitor_2_1776253504333.mp4\n-rw-r--r-- 1 lukas staff 1721625 15 Apr 14:50 compact_monitor_2_1776253807794.mp4\n-rw-r--r-- 1 lukas staff 5168799 15 Apr 14:55 compact_monitor_2_1776254111721.mp4\n-rw-r--r-- 1 lukas staff 1008125 15 Apr 15:00 compact_monitor_2_1776254418941.mp4\n-rw-r--r-- 1 lukas staff 2805751 15 Apr 15:05 compact_monitor_2_1776254723846.mp4\n-rw-r--r-- 1 lukas staff 4263256 15 Apr 15:10 compact_monitor_2_1776255030878.mp4\n-rw-r--r-- 1 lukas staff 1855151 15 Apr 15:15 compact_monitor_2_1776255336562.mp4\n-rw-r--r-- 1 lukas staff 1068172 15 Apr 15:20 compact_monitor_2_1776255640728.mp4\n-rw-r--r-- 1 lukas staff 393423 15 Apr 15:25 compact_monitor_2_1776255946991.mp4\n-rw-r--r-- 1 lukas staff 1066924 15 Apr 15:30 compact_monitor_2_1776256250851.mp4\n-rw-r--r-- 1 lukas staff 4522183 15 Apr 15:36 compact_monitor_2_1776256557162.mp4\n-rw-r--r-- 1 lukas staff 21285442 15 Apr 15:41 compact_monitor_2_1776256868069.mp4\n-rw-r--r-- 1 lukas staff 4799464 15 Apr 15:41 compact_monitor_2_1776256880438.mp4\n-rw-r--r-- 1 lukas staff 25082442 15 Apr 15:46 compact_monitor_2_1776257187591.mp4\n-rw-r--r-- 1 lukas staff 29377114 15 Apr 15:51 compact_monitor_2_1776257503657.mp4\n-rw-r--r-- 1 lukas staff 2577148 15 Apr 15:51 compact_monitor_2_1776257516759.mp4\n-rw-r--r-- 1 lukas staff 35197312 15 Apr 15:57 compact_monitor_2_1776257823244.mp4\n-rw-r--r-- 1 lukas staff 739380 15 Apr 15:57 compact_monitor_2_1776257838858.mp4\n-rw-r--r-- 1 lukas staff 39595503 15 Apr 16:02 compact_monitor_2_1776258144789.mp4\n-rw-r--r-- 1 lukas staff 2671413 15 Apr 16:02 compact_monitor_2_1776258160717.mp4\n-rw-r--r-- 1 lukas staff 33576004 15 Apr 16:08 compact_monitor_2_1776258467332.mp4\n-rw-r--r-- 1 lukas staff 3404945 15 Apr 16:08 compact_monitor_2_1776258481869.mp4\n-rw-r--r-- 1 lukas staff 36386887 15 Apr 16:13 compact_monitor_2_1776258789278.mp4\n-rw-r--r-- 1 lukas staff 2717076 15 Apr 16:13 compact_monitor_2_1776258804257.mp4\n-rw-r--r-- 1 lukas staff 38542946 15 Apr 16:18 compact_monitor_2_1776259112717.mp4\n-rw-r--r-- 1 lukas staff 6480087 15 Apr 16:18 compact_monitor_2_1776259128284.mp4\n-rw-r--r-- 1 lukas staff 39076466 15 Apr 16:24 compact_monitor_2_1776259438063.mp4\n-rw-r--r-- 1 lukas staff 4361748 15 Apr 16:24 compact_monitor_2_1776259453552.mp4\n-rw-r--r-- 1 lukas staff 30743109 15 Apr 16:29 compact_monitor_2_1776259762038.mp4\n-rw-r--r-- 1 lukas staff 35230072 15 Apr 16:34 compact_monitor_2_1776260081207.mp4\n-rw-r--r-- 1 lukas staff 44719930 15 Apr 16:40 compact_monitor_2_1776260402183.mp4\n-rw-r--r-- 1 lukas staff 40699319 15 Apr 16:45 compact_monitor_2_1776260727063.mp4\n-rw-r--r-- 1 lukas staff 40175062 15 Apr 16:51 compact_monitor_2_1776261051104.mp4\n-rw-r--r-- 1 lukas staff 10100456 15 Apr 16:51 compact_monitor_2_1776261066254.mp4\n-rw-r--r-- 1 lukas staff 40218171 15 Apr 16:56 compact_monitor_2_1776261377240.mp4\n-rw-r--r-- 1 lukas staff 10164441 15 Apr 16:56 compact_monitor_2_1776261392293.mp4\n-rw-r--r-- 1 lukas staff 39679757 15 Apr 17:01 compact_monitor_2_1776261703501.mp4\n-rw-r--r-- 1 lukas staff 16362780 15 Apr 17:02 compact_monitor_2_1776261718068.mp4\n-rw-r--r-- 1 lukas staff 35673196 15 Apr 17:07 compact_monitor_2_1776262030308.mp4\n-rw-r--r-- 1 lukas staff 418425 15 Apr 17:07 compact_monitor_2_1776262044183.mp4\n-rw-r--r-- 1 lukas staff 38695493 15 Apr 17:12 compact_monitor_2_1776262350156.mp4\n-rw-r--r-- 1 lukas staff 41039121 15 Apr 17:18 compact_monitor_2_1776262671510.mp4\n-rw-r--r-- 1 lukas staff 14440675 15 Apr 17:18 compact_monitor_2_1776262686451.mp4\n-rw-r--r-- 1 lukas staff 29155784 15 Apr 17:23 compact_monitor_2_1776262997519.mp4\n-rw-r--r-- 1 lukas staff 38013561 15 Apr 17:28 compact_monitor_2_1776263315513.mp4\n-rw-r--r-- 1 lukas staff 13728546 15 Apr 17:28 compact_monitor_2_1776263330175.mp4\n-rw-r--r-- 1 lukas staff 42282890 15 Apr 17:34 compact_monitor_2_1776263643561.mp4\n-rw-r--r-- 1 lukas staff 15975636 15 Apr 17:34 compact_monitor_2_1776263659153.mp4\n-rw-r--r-- 1 lukas staff 42361074 15 Apr 17:39 compact_monitor_2_1776263971167.mp4\n-rw-r--r-- 1 lukas staff 12206045 15 Apr 17:39 compact_monitor_2_1776263987012.mp4\n-rw-r--r-- 1 lukas staff 46367818 15 Apr 17:45 compact_monitor_2_1776264298000.mp4\n-rw-r--r-- 1 lukas staff 8981811 15 Apr 17:45 compact_monitor_2_1776264315186.mp4\n-rw-r--r-- 1 lukas staff 39268566 15 Apr 17:50 compact_monitor_2_1776264625122.mp4\n-rw-r--r-- 1 lukas staff 14427002 15 Apr 17:50 compact_monitor_2_1776264640284.mp4\n-rw-r--r-- 1 lukas staff 39524622 15 Apr 17:56 compact_monitor_2_1776264952043.mp4\n-rw-r--r-- 1 lukas staff 12413344 15 Apr 17:56 compact_monitor_2_1776264966984.mp4\n-rw-r--r-- 1 lukas staff 37530622 15 Apr 18:01 compact_monitor_2_1776265280164.mp4\n-rw-r--r-- 1 lukas staff 16392257 15 Apr 18:01 compact_monitor_2_1776265294548.mp4\n-rw-r--r-- 1 lukas staff 43552334 15 Apr 18:07 compact_monitor_2_1776265608065.mp4\n-rw-r--r-- 1 lukas staff 6335856 15 Apr 18:07 compact_monitor_2_1776265624847.mp4\n-rw-r--r-- 1 lukas staff 40102732 15 Apr 18:12 compact_monitor_2_1776265936487.mp4\n-rw-r--r-- 1 lukas staff 10852075 15 Apr 18:12 compact_monitor_2_1776265950996.mp4\n-rw-r--r-- 1 lukas staff 33010772 15 Apr 18:17 compact_monitor_2_1776266266304.mp4\n-rw-r--r-- 1 lukas staff 12302090 15 Apr 18:18 compact_monitor_2_1776266279297.mp4\n-rw-r--r-- 1 lukas staff 37997133 15 Apr 18:23 compact_monitor_2_1776266594590.mp4\n-rw-r--r-- 1 lukas staff 13660744 15 Apr 18:23 compact_monitor_2_1776266608276.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-15 $ ll\ntotal 4476272\ndrwxr-xr-x 740 lukas staff 23680 15 Apr 18:38 .\ndrwxr-xr-x 9 lukas staff 288 15 Apr 09:58 ..\n-rw-r--r-- 1 lukas staff 669036 15 Apr 18:13 1776265985239_m2.jpg\n-rw-r--r-- 1 lukas staff 203719 15 Apr 18:13 1776265985279_m1.jpg\n-rw-r--r-- 1 lukas staff 203612 15 Apr 18:13 1776265987070_m1.jpg\n-rw-r--r-- 1 lukas staff 674275 15 Apr 18:13 1776265987771_m2.jpg\n-rw-r--r-- 1 lukas staff 203511 15 Apr 18:13 1776265989538_m1.jpg\n-rw-r--r-- 1 lukas staff 667384 15 Apr 18:13 1776265989967_m2.jpg\n-rw-r--r-- 1 lukas staff 203666 15 Apr 18:13 1776265991616_m1.jpg\n-rw-r--r-- 1 lukas staff 669140 15 Apr 18:13 1776265992196_m2.jpg\n-rw-r--r-- 1 lukas staff 203595 15 Apr 18:13 1776265993913_m1.jpg\n-rw-r--r-- 1 lukas staff 680910 15 Apr 18:13 1776265994505_m2.jpg\n-rw-r--r-- 1 lukas staff 203581 15 Apr 18:13 1776265996130_m1.jpg\n-rw-r--r-- 1 lukas staff 670428 15 Apr 18:13 1776265996652_m2.jpg\n-rw-r--r-- 1 lukas staff 203708 15 Apr 18:13 1776265998298_m1.jpg\n-rw-r--r-- 1 lukas staff 659876 15 Apr 18:13 1776265998619_m2.jpg\n-rw-r--r-- 1 lukas staff 203790 15 Apr 18:13 1776266000317_m1.jpg\n-rw-r--r-- 1 lukas staff 675595 15 Apr 18:13 1776266000927_m2.jpg\n-rw-r--r-- 1 lukas staff 203772 15 Apr 18:13 1776266002837_m1.jpg\n-rw-r--r-- 1 lukas staff 681185 15 Apr 18:13 1776266003295_m2.jpg\n-rw-r--r-- 1 lukas staff 203737 15 Apr 18:13 1776266004906_m1.jpg\n-rw-r--r-- 1 lukas staff 674774 15 Apr 18:13 1776266005279_m2.jpg\n-rw-r--r-- 1 lukas staff 203710 15 Apr 18:13 1776266007045_m1.jpg\n-rw-r--r-- 1 lukas staff 672301 15 Apr 18:13 1776266007562_m2.jpg\n-rw-r--r-- 1 lukas staff 203778 15 Apr 18:13 1776266009409_m1.jpg\n-rw-r--r-- 1 lukas staff 647795 15 Apr 18:13 1776266009873_m2.jpg\n-rw-r--r-- 1 lukas staff 203773 15 Apr 18:13 1776266011796_m1.jpg\n-rw-r--r-- 1 lukas staff 621588 15 Apr 18:13 1776266012145_m2.jpg\n-rw-r--r-- 1 lukas staff 203797 15 Apr 18:13 1776266013610_m1.jpg\n-rw-r--r-- 1 lukas staff 557210 15 Apr 18:13 1776266013959_m2.jpg\n-rw-r--r-- 1 lukas staff 203799 15 Apr 18:13 1776266015437_m1.jpg\n-rw-r--r-- 1 lukas staff 576074 15 Apr 18:13 1776266015791_m2.jpg\n-rw-r--r-- 1 lukas staff 203846 15 Apr 18:13 1776266017399_m1.jpg\n-rw-r--r-- 1 lukas staff 592254 15 Apr 18:13 1776266017945_m2.jpg\n-rw-r--r-- 1 lukas staff 203767 15 Apr 18:13 1776266019677_m1.jpg\n-rw-r--r-- 1 lukas staff 554944 15 Apr 18:13 1776266020127_m2.jpg\n-rw-r--r-- 1 lukas staff 203706 15 Apr 18:13 1776266022131_m1.jpg\n-rw-r--r-- 1 lukas staff 584193 15 Apr 18:13 1776266022505_m2.jpg\n-rw-r--r-- 1 lukas staff 203718 15 Apr 18:13 1776266024358_m1.jpg\n-rw-r--r-- 1 lukas staff 586235 15 Apr 18:13 1776266024952_m2.jpg\n-rw-r--r-- 1 lukas staff 203609 15 Apr 18:13 1776266026730_m1.jpg\n-rw-r--r-- 1 lukas staff 582376 15 Apr 18:13 1776266027279_m2.jpg\n-rw-r--r-- 1 lukas staff 203696 15 Apr 18:13 1776266028710_m1.jpg\n-rw-r--r-- 1 lukas staff 568913 15 Apr 18:13 1776266029111_m2.jpg\n-rw-r--r-- 1 lukas staff 203648 15 Apr 18:13 1776266030751_m1.jpg\n-rw-r--r-- 1 lukas staff 431509 15 Apr 18:13 1776266031143_m2.jpg\n-rw-r--r-- 1 lukas staff 468169 15 Apr 18:13 1776266033149_m2.jpg\n-rw-r--r-- 1 lukas staff 203714 15 Apr 18:13 1776266033552_m1.jpg\n-rw-r--r-- 1 lukas staff 203753 15 Apr 18:13 1776266035546_m1.jpg\n-rw-r--r-- 1 lukas staff 477414 15 Apr 18:13 1776266036047_m2.jpg\n-rw-r--r-- 1 lukas staff 203704 15 Apr 18:13 1776266037947_m1.jpg\n-rw-r--r-- 1 lukas staff 476980 15 Apr 18:13 1776266038370_m2.jpg\n-rw-r--r-- 1 lukas staff 203686 15 Apr 18:14 1776266040183_m1.jpg\n-rw-r--r-- 1 lukas staff 485156 15 Apr 18:14 1776266040577_m2.jpg\n-rw-r--r-- 1 lukas staff 486141 15 Apr 18:14 1776266042413_m2.jpg\n-rw-r--r-- 1 lukas staff 490784 15 Apr 18:14 1776266043473_m2.jpg\n-rw-r--r-- 1 lukas staff 556817 15 Apr 18:14 1776266044640_m2.jpg\n-rw-r--r-- 1 lukas staff 588963 15 Apr 18:14 1776266045757_m2.jpg\n-rw-r--r-- 1 lukas staff 591407 15 Apr 18:14 1776266046926_m2.jpg\n-rw-r--r-- 1 lukas staff 204286 15 Apr 18:14 1776266048022_m1.jpg\n-rw-r--r-- 1 lukas staff 592997 15 Apr 18:14 1776266048341_m2.jpg\n-rw-r--r-- 1 lukas staff 204367 15 Apr 18:14 1776266050092_m1.jpg\n-rw-r--r-- 1 lukas staff 595109 15 Apr 18:14 1776266050576_m2.jpg\n-rw-r--r-- 1 lukas staff 203877 15 Apr 18:14 1776266052271_m1.jpg\n-rw-r--r-- 1 lukas staff 617722 15 Apr 18:14 1776266052711_m2.jpg\n-rw-r--r-- 1 lukas staff 566247 15 Apr 18:14 1776266054920_m2.jpg\n-rw-r--r-- 1 lukas staff 587163 15 Apr 18:14 1776266056075_m2.jpg\n-rw-r--r-- 1 lukas staff 203881 15 Apr 18:14 1776266056756_m1.jpg\n-rw-r--r-- 1 lukas staff 590009 15 Apr 18:14 1776266057195_m2.jpg\n-rw-r--r-- 1 lukas staff 559463 15 Apr 18:14 1776266059115_m2.jpg\n-rw-r--r-- 1 lukas staff 203874 15 Apr 18:14 1776266060554_m1.jpg\n-rw-r--r-- 1 lukas staff 596850 15 Apr 18:14 1776266060554_m2.jpg\n-rw-r--r-- 1 lukas staff 203900 15 Apr 18:14 1776266062752_m1.jpg\n-rw-r--r-- 1 lukas staff 441354 15 Apr 18:14 1776266066711_m2.jpg\n-rw-r--r-- 1 lukas staff 55745 15 Apr 18:14 1776266068595_m1.jpg\n-rw-r--r-- 1 lukas staff 446599 15 Apr 18:14 1776266069433_m2.jpg\n-rw-r--r-- 1 lukas staff 446609 15 Apr 18:14 1776266070172_m2.jpg\n-rw-r--r-- 1 lukas staff 94532 15 Apr 18:14 1776266070176_m1.jpg\n-rw-r--r-- 1 lukas staff 88474 15 Apr 18:14 1776266071656_m1.jpg\n-rw-r--r-- 1 lukas staff 535766 15 Apr 18:14 1776266072584_m2.jpg\n-rw-r--r-- 1 lukas staff 92870 15 Apr 18:14 1776266074845_m1.jpg\n-rw-r--r-- 1 lukas staff 88052 15 Apr 18:14 1776266077692_m1.jpg\n-rw-r--r-- 1 lukas staff 88179 15 Apr 18:14 1776266082536_m1.jpg\n-rw-r--r-- 1 lukas staff 533426 15 Apr 18:14 1776266082536_m2.jpg\n-rw-r--r-- 1 lukas staff 88175 15 Apr 18:14 1776266084440_m1.jpg\n-rw-r--r-- 1 lukas staff 500743 15 Apr 18:14 1776266084440_m2.jpg\n-rw-r--r-- 1 lukas staff 502910 15 Apr 18:14 1776266085860_m2.jpg\n-rw-r--r-- 1 lukas staff 88161 15 Apr 18:14 1776266087714_m1.jpg\n-rw-r--r-- 1 lukas staff 562872 15 Apr 18:14 1776266087714_m2.jpg\n-rw-r--r-- 1 lukas staff 507401 15 Apr 18:14 1776266091668_m2.jpg\n-rw-r--r-- 1 lukas staff 88198 15 Apr 18:14 1776266091678_m1.jpg\n-rw-r--r-- 1 lukas staff 556350 15 Apr 18:14 1776266096275_m2.jpg\n-rw-r--r-- 1 lukas staff 574870 15 Apr 18:14 1776266099219_m2.jpg\n-rw-r--r-- 1 lukas staff 88436 15 Apr 18:15 1776266104959_m1.jpg\n-rw-r--r-- 1 lukas staff 254145 15 Apr 18:15 1776266105237_m2.jpg\n-rw-r--r-- 1 lukas staff 88535 15 Apr 18:15 1776266106590_m1.jpg\n-rw-r--r-- 1 lukas staff 276093 15 Apr 18:15 1776266106590_m2.jpg\n-rw-r--r-- 1 lukas staff 95178 15 Apr 18:15 1776266107364_m1.jpg\n-rw-r--r-- 1 lukas staff 272726 15 Apr 18:15 1776266107397_m2.jpg\n-rw-r--r-- 1 lukas staff 272729 15 Apr 18:15 1776266108410_m2.jpg\n-rw-r--r-- 1 lukas staff 95201 15 Apr 18:15 1776266108439_m1.jpg\n-rw-r--r-- 1 lukas staff 207648 15 Apr 18:15 1776266110874_m1.jpg\n-rw-r--r-- 1 lukas staff 272706 15 Apr 18:15 1776266111078_m2.jpg\n-rw-r--r-- 1 lukas staff 208459 15 Apr 18:15 1776266111821_m1.jpg\n-rw-r--r-- 1 lukas staff 212011 15 Apr 18:15 1776266113939_m1.jpg\n-rw-r--r-- 1 lukas staff 272780 15 Apr 18:15 1776266122951_m2.jpg\n-rw-r--r-- 1 lukas staff 211547 15 Apr 18:15 1776266122974_m1.jpg\n-rw-r--r-- 1 lukas staff 209162 15 Apr 18:15 1776266123875_m1.jpg\n-rw-r--r-- 1 lukas staff 205277 15 Apr 18:15 1776266125853_m1.jpg\n-rw-r--r-- 1 lukas staff 272667 15 Apr 18:15 1776266125853_m2.jpg\n-rw-r--r-- 1 lukas staff 272719 15 Apr 18:15 1776266127403_m2.jpg\n-rw-r--r-- 1 lukas staff 206802 15 Apr 18:15 1776266127410_m1.jpg\n-rw-r--r-- 1 lukas staff 213918 15 Apr 18:15 1776266130082_m1.jpg\n-rw-r--r-- 1 lukas staff 212411 15 Apr 18:15 1776266132673_m1.jpg\n-rw-r--r-- 1 lukas staff 272808 15 Apr 18:15 1776266132673_m2.jpg\n-rw-r--r-- 1 lukas staff 207894 15 Apr 18:15 1776266133340_m1.jpg\n-rw-r--r-- 1 lukas staff 555932 15 Apr 18:15 1776266134609_m2.jpg\n-rw-r--r-- 1 lukas staff 207911 15 Apr 18:15 1776266135525_m1.jpg\n-rw-r--r-- 1 lukas staff 548908 15 Apr 18:15 1776266137606_m2.jpg\n-rw-r--r-- 1 lukas staff 207856 15 Apr 18:15 1776266138682_m1.jpg\n-rw-r--r-- 1 lukas staff 560222 15 Apr 18:15 1776266140759_m2.jpg\n-rw-r--r-- 1 lukas staff 560157 15 Apr 18:15 1776266143743_m2.jpg\n-rw-r--r-- 1 lukas staff 207838 15 Apr 18:15 1776266144684_m1.jpg\n-rw-r--r-- 1 lukas staff 537855 15 Apr 18:15 1776266145496_m2.jpg\n-rw-r--r-- 1 lukas staff 587185 15 Apr 18:15 1776266147770_m2.jpg\n-rw-r--r-- 1 lukas staff 209722 15 Apr 18:15 1776266150490_m1.jpg\n-rw-r--r-- 1 lukas staff 216901 15 Apr 18:15 1776266150747_m2.jpg\n-rw-r--r-- 1 lukas staff 208191 15 Apr 18:15 1776266153538_m1.jpg\n-rw-r--r-- 1 lukas staff 258901 15 Apr 18:15 1776266153787_m2.jpg\n-rw-r--r-- 1 lukas staff 276340 15 Apr 18:15 1776266156823_m2.jpg\n-rw-r--r-- 1 lukas staff 208298 15 Apr 18:15 1776266158610_m1.jpg\n-rw-r--r-- 1 lukas staff 590491 15 Apr 18:15 1776266158610_m2.jpg\n-rw-r--r-- 1 lukas staff 208192 15 Apr 18:16 1776266160959_m1.jpg\n-rw-r--r-- 1 lukas staff 545849 15 Apr 18:16 1776266161252_m2.jpg\n-rw-r--r-- 1 lukas staff 208154 15 Apr 18:16 1776266163104_m1.jpg\n-rw-r--r-- 1 lukas staff 519973 15 Apr 18:16 1776266164298_m2.jpg\n-rw-r--r-- 1 lukas staff 208231 15 Apr 18:16 1776266165561_m1.jpg\n-rw-r--r-- 1 lukas staff 593300 15 Apr 18:16 1776266166851_m2.jpg\n-rw-r--r-- 1 lukas staff 574561 15 Apr 18:16 1776266168075_m2.jpg\n-rw-r--r-- 1 lukas staff 208190 15 Apr 18:16 1776266168319_m1.jpg\n-rw-r--r-- 1 lukas staff 208164 15 Apr 18:16 1776266170354_m1.jpg\n-rw-r--r-- 1 lukas staff 558860 15 Apr 18:16 1776266170659_m2.jpg\n-rw-r--r-- 1 lukas staff 517959 15 Apr 18:16 1776266175820_m2.jpg\n-rw-r--r-- 1 lukas staff 208615 15 Apr 18:16 1776266177600_m1.jpg\n-rw-r--r-- 1 lukas staff 562544 15 Apr 18:16 1776266177627_m2.jpg\n-rw-r--r-- 1 lukas staff 208601 15 Apr 18:16 1776266180047_m1.jpg\n-rw-r--r-- 1 lukas staff 582678 15 Apr 18:16 1776266180212_m2.jpg\n-rw-r--r-- 1 lukas staff 208628 15 Apr 18:16 1776266181996_m1.jpg\n-rw-r--r-- 1 lukas staff 208571 15 Apr 18:16 1776266185646_m1.jpg\n-rw-r--r-- 1 lukas staff 594509 15 Apr 18:16 1776266185646_m2.jpg\n-rw-r--r-- 1 lukas staff 208622 15 Apr 18:16 1776266187916_m1.jpg\n-rw-r--r-- 1 lukas staff 608592 15 Apr 18:16 1776266188157_m2.jpg\n-rw-r--r-- 1 lukas staff 599957 15 Apr 18:16 1776266190500_m2.jpg\n-rw-r--r-- 1 lukas staff 208624 15 Apr 18:16 1776266190949_m1.jpg\n-rw-r--r-- 1 lukas staff 208694 15 Apr 18:16 1776266193217_m1.jpg\n-rw-r--r-- 1 lukas staff 615862 15 Apr 18:16 1776266193357_m2.jpg\n-rw-r--r-- 1 lukas staff 208254 15 Apr 18:16 1776266195513_m1.jpg\n-rw-r--r-- 1 lukas staff 624275 15 Apr 18:16 1776266195549_m2.jpg\n-rw-r--r-- 1 lukas staff 645335 15 Apr 18:16 1776266197725_m2.jpg\n-rw-r--r-- 1 lukas staff 208241 15 Apr 18:16 1776266198956_m1.jpg\n-rw-r--r-- 1 lukas staff 646868 15 Apr 18:16 1776266199007_m2.jpg\n-rw-r--r-- 1 lukas staff 208643 15 Apr 18:16 1776266202174_m1.jpg\n-rw-r--r-- 1 lukas staff 652412 15 Apr 18:16 1776266202213_m2.jpg\n-rw-r--r-- 1 lukas staff 208612 15 Apr 18:16 1776266206551_m1.jpg\n-rw-r--r-- 1 lukas staff 656571 15 Apr 18:16 1776266206551_m2.jpg\n-rw-r--r-- 1 lukas staff 208638 15 Apr 18:16 1776266209266_m1.jpg\n-rw-r--r-- 1 lukas staff 658369 15 Apr 18:16 1776266209280_m2.jpg\n-rw-r--r-- 1 lukas staff 208715 15 Apr 18:16 1776266212218_m1.jpg\n-rw-r--r-- 1 lukas staff 659247 15 Apr 18:16 1776266212218_m2.jpg\n-rw-r--r-- 1 lukas staff 208689 15 Apr 18:16 1776266215752_m1.jpg\n-rw-r--r-- 1 lukas staff 653016 15 Apr 18:16 1776266215771_m2.jpg\n-rw-r--r-- 1 lukas staff 586023 15 Apr 18:17 1776266219752_m2.jpg\n-rw-r--r-- 1 lukas staff 208588 15 Apr 18:17 1776266220701_m1.jpg\n-rw-r--r-- 1 lukas staff 633574 15 Apr 18:17 1776266221274_m2.jpg\n-rw-r--r-- 1 lukas staff 636933 15 Apr 18:17 1776266227340_m2.jpg\n-rw-r--r-- 1 lukas staff 639420 15 Apr 18:17 1776266232300_m2.jpg\n-rw-r--r-- 1 lukas staff 208544 15 Apr 18:17 1776266232337_m1.jpg\n-rw-r--r-- 1 lukas staff 643943 15 Apr 18:17 1776266236469_m2.jpg\n-rw-r--r-- 1 lukas staff 208610 15 Apr 18:17 1776266236483_m1.jpg\n-rw-r--r-- 1 lukas staff 208598 15 Apr 18:17 1776266238593_m1.jpg\n-rw-r--r-- 1 lukas staff 630398 15 Apr 18:17 1776266238602_m2.jpg\n-rw-r--r-- 1 lukas staff 624451 15 Apr 18:17 1776266240803_m2.jpg\n-rw-r--r-- 1 lukas staff 208484 15 Apr 18:17 1776266242547_m1.jpg\n-rw-r--r-- 1 lukas staff 630386 15 Apr 18:17 1776266242547_m2.jpg\n-rw-r--r-- 1 lukas staff 208525 15 Apr 18:17 1776266244786_m1.jpg\n-rw-r--r-- 1 lukas staff 633291 15 Apr 18:17 1776266245111_m2.jpg\n-rw-r--r-- 1 lukas staff 545820 15 Apr 18:17 1776266247239_m2.jpg\n-rw-r--r-- 1 lukas staff 547468 15 Apr 18:17 1776266248374_m2.jpg\n-rw-r--r-- 1 lukas staff 208653 15 Apr 18:17 1776266248977_m1.jpg\n-rw-r--r-- 1 lukas staff 533852 15 Apr 18:17 1776266249644_m2.jpg\n-rw-r--r-- 1 lukas staff 560142 15 Apr 18:17 1776266251631_m2.jpg\n-rw-r--r-- 1 lukas staff 208278 15 Apr 18:17 1776266254529_m1.jpg\n-rw-r--r-- 1 lukas staff 671156 15 Apr 18:17 1776266254554_m2.jpg\n-rw-r--r-- 1 lukas staff 671725 15 Apr 18:17 1776266257375_m2.jpg\n-rw-r--r-- 1 lukas staff 208252 15 Apr 18:17 1776266257388_m1.jpg\n-rw-r--r-- 1 lukas staff 208266 15 Apr 18:17 1776266260730_m1.jpg\n-rw-r--r-- 1 lukas staff 668299 15 Apr 18:17 1776266261140_m2.jpg\n-rw-r--r-- 1 lukas staff 208309 15 Apr 18:17 1776266262574_m1.jpg\n-rw-r--r-- 1 lukas staff 662509 15 Apr 18:17 1776266262882_m2.jpg\n-rw-r--r-- 1 lukas staff 208131 15 Apr 18:17 1776266264475_m1.jpg\n-rw-r--r-- 1 lukas staff 662810 15 Apr 18:17 1776266264869_m2.jpg\n-rw-r--r-- 1 lukas staff 208191 15 Apr 18:17 1776266266343_m1.jpg\n-rw-r--r-- 1 lukas staff 668093 15 Apr 18:17 1776266266919_m2.jpg\n-rw-r--r-- 1 lukas staff 208163 15 Apr 18:17 1776266268978_m1.jpg\n-rw-r--r-- 1 lukas staff 666086 15 Apr 18:17 1776266269305_m2.jpg\n-rw-r--r-- 1 lukas staff 208277 15 Apr 18:17 1776266271029_m1.jpg\n-rw-r--r-- 1 lukas staff 659339 15 Apr 18:17 1776266271383_m2.jpg\n-rw-r--r-- 1 lukas staff 208198 15 Apr 18:17 1776266273464_m1.jpg\n-rw-r--r-- 1 lukas staff 662828 15 Apr 18:17 1776266273971_m2.jpg\n-rw-r--r-- 1 lukas staff 208062 15 Apr 18:17 1776266275425_m1.jpg\n-rw-r--r-- 1 lukas staff 661898 15 Apr 18:17 1776266275684_m2.jpg\n-rw-r--r-- 1 lukas staff 208033 15 Apr 18:17 1776266277232_m1.jpg\n-rw-r--r-- 1 lukas staff 658221 15 Apr 18:17 1776266277517_m2.jpg\n-rw-r--r-- 1 lukas staff 208114 15 Apr 18:17 1776266279573_m1.jpg\n-rw-r--r-- 1 lukas staff 602127 15 Apr 18:18 1776266280047_m2.jpg\n-rw-r--r-- 1 lukas staff 208037 15 Apr 18:18 1776266281724_m1.jpg\n-rw-r--r-- 1 lukas staff 596966 15 Apr 18:18 1776266282107_m2.jpg\n-rw-r--r-- 1 lukas staff 208120 15 Apr 18:18 1776266283882_m1.jpg\n-rw-r--r-- 1 lukas staff 605123 15 Apr 18:18 1776266284188_m2.jpg\n-rw-r--r-- 1 lukas staff 208244 15 Apr 18:18 1776266285945_m1.jpg\n-rw-r--r-- 1 lukas staff 619753 15 Apr 18:18 1776266286471_m2.jpg\n-rw-r--r-- 1 lukas staff 208208 15 Apr 18:18 1776266288028_m1.jpg\n-rw-r--r-- 1 lukas staff 642228 15 Apr 18:18 1776266288334_m2.jpg\n-rw-r--r-- 1 lukas staff 208132 15 Apr 18:18 1776266289850_m1.jpg\n-rw-r--r-- 1 lukas staff 596740 15 Apr 18:18 1776266290179_m2.jpg\n-rw-r--r-- 1 lukas staff 208063 15 Apr 18:18 1776266291759_m1.jpg\n-rw-r--r-- 1 lukas staff 519390 15 Apr 18:18 1776266292102_m2.jpg\n-rw-r--r-- 1 lukas staff 208064 15 Apr 18:18 1776266293780_m1.jpg\n-rw-r--r-- 1 lukas staff 570229 15 Apr 18:18 1776266294157_m2.jpg\n-rw-r--r-- 1 lukas staff 208572 15 Apr 18:18 1776266296164_m1.jpg\n-rw-r--r-- 1 lukas staff 627388 15 Apr 18:18 1776266296515_m2.jpg\n-rw-r--r-- 1 lukas staff 208569 15 Apr 18:18 1776266298335_m1.jpg\n-rw-r--r-- 1 lukas staff 634945 15 Apr 18:18 1776266298705_m2.jpg\n-rw-r--r-- 1 lukas staff 208639 15 Apr 18:18 1776266300354_m1.jpg\n-rw-r--r-- 1 lukas staff 657628 15 Apr 18:18 1776266300766_m2.jpg\n-rw-r--r-- 1 lukas staff 657244 15 Apr 18:18 1776266302789_m2.jpg\n-rw-r--r-- 1 lukas staff 208494 15 Apr 18:18 1776266303032_m1.jpg\n-rw-r--r-- 1 lukas staff 644942 15 Apr 18:18 1776266305193_m2.jpg\n-rw-r--r-- 1 lukas staff 208528 15 Apr 18:18 1776266305226_m1.jpg\n-rw-r--r-- 1 lukas staff 659418 15 Apr 18:18 1776266307482_m2.jpg\n-rw-r--r-- 1 lukas staff 208235 15 Apr 18:18 1776266307995_m1.jpg\n-rw-r--r-- 1 lukas staff 653477 15 Apr 18:18 1776266310362_m2.jpg\n-rw-r--r-- 1 lukas staff 650556 15 Apr 18:18 1776266311519_m2.jpg\n-rw-r--r-- 1 lukas staff 208178 15 Apr 18:18 1776266311576_m1.jpg\n-rw-r--r-- 1 lukas staff 639707 15 Apr 18:18 1776266314332_m2.jpg\n-rw-r--r-- 1 lukas staff 208212 15 Apr 18:18 1776266314402_m1.jpg\n-rw-r--r-- 1 lukas staff 627225 15 Apr 18:18 1776266316656_m2.jpg\n-rw-r--r-- 1 lukas staff 640482 15 Apr 18:18 1776266317791_m2.jpg\n-rw-r--r-- 1 lukas staff 208927 15 Apr 18:18 1776266317875_m1.jpg\n-rw-r--r-- 1 lukas staff 655721 15 Apr 18:18 1776266320034_m2.jpg\n-rw-r--r-- 1 lukas staff 653914 15 Apr 18:18 1776266321149_m2.jpg\n-rw-r--r-- 1 lukas staff 208973 15 Apr 18:18 1776266322248_m1.jpg\n-rw-r--r-- 1 lukas staff 651290 15 Apr 18:18 1776266322405_m2.jpg\n-rw-r--r-- 1 lukas staff 208883 15 Apr 18:18 1776266324678_m1.jpg\n-rw-r--r-- 1 lukas staff 649799 15 Apr 18:18 1776266324696_m2.jpg\n-rw-r--r-- 1 lukas staff 208944 15 Apr 18:18 1776266327023_m1.jpg\n-rw-r--r-- 1 lukas staff 640016 15 Apr 18:18 1776266327481_m2.jpg\n-rw-r--r-- 1 lukas staff 648723 15 Apr 18:18 1776266329400_m2.jpg\n-rw-r--r-- 1 lukas staff 649676 15 Apr 18:18 1776266330593_m2.jpg\n-rw-r--r-- 1 lukas staff 208128 15 Apr 18:18 1776266331799_m1.jpg\n-rw-r--r-- 1 lukas staff 657268 15 Apr 18:18 1776266331870_m2.jpg\n-rw-r--r-- 1 lukas staff 614701 15 Apr 18:18 1776266334838_m2.jpg\n-rw-r--r-- 1 lukas staff 208599 15 Apr 18:18 1776266334866_m1.jpg\n-rw-r--r-- 1 lukas staff 208720 15 Apr 18:18 1776266337075_m1.jpg\n-rw-r--r-- 1 lukas staff 635012 15 Apr 18:18 1776266337384_m2.jpg\n-rw-r--r-- 1 lukas staff 208649 15 Apr 18:18 1776266339499_m1.jpg\n-rw-r--r-- 1 lukas staff 654410 15 Apr 18:19 1776266340051_m2.jpg\n-rw-r--r-- 1 lukas staff 670162 15 Apr 18:19 1776266342278_m2.jpg\n-rw-r--r-- 1 lukas staff 208679 15 Apr 18:19 1776266343422_m1.jpg\n-rw-r--r-- 1 lukas staff 679486 15 Apr 18:19 1776266343480_m2.jpg\n-rw-r--r-- 1 lukas staff 580457 15 Apr 18:19 1776266346149_m2.jpg\n-rw-r--r-- 1 lukas staff 613073 15 Apr 18:19 1776266349191_m2.jpg\n-rw-r--r-- 1 lukas staff 208605 15 Apr 18:19 1776266349504_m1.jpg\n-rw-r--r-- 1 lukas staff 208530 15 Apr 18:19 1776266351872_m1.jpg\n-rw-r--r-- 1 lukas staff 618382 15 Apr 18:19 1776266352314_m2.jpg\n-rw-r--r-- 1 lukas staff 208156 15 Apr 18:19 1776266354320_m1.jpg\n-rw-r--r-- 1 lukas staff 637916 15 Apr 18:19 1776266354736_m2.jpg\n-rw-r--r-- 1 lukas staff 208104 15 Apr 18:19 1776266356503_m1.jpg\n-rw-r--r-- 1 lukas staff 635941 15 Apr 18:19 1776266356846_m2.jpg\n-rw-r--r-- 1 lukas staff 208119 15 Apr 18:19 1776266358528_m1.jpg\n-rw-r--r-- 1 lukas staff 618746 15 Apr 18:19 1776266358951_m2.jpg\n-rw-r--r-- 1 lukas staff 741230 15 Apr 18:19 1776266360933_m2.jpg\n-rw-r--r-- 1 lukas staff 684325 15 Apr 18:19 1776266362281_m2.jpg\n-rw-r--r-- 1 lukas staff 208646 15 Apr 18:19 1776266362913_m1.jpg\n-rw-r--r-- 1 lukas staff 700483 15 Apr 18:19 1776266365163_m2.jpg\n-rw-r--r-- 1 lukas staff 208877 15 Apr 18:19 1776266366139_m1.jpg\n-rw-r--r-- 1 lukas staff 601181 15 Apr 18:19 1776266366639_m2.jpg\n-rw-r--r-- 1 lukas staff 208909 15 Apr 18:19 1776266369139_m1.jpg\n-rw-r--r-- 1 lukas staff 655095 15 Apr 18:19 1776266369139_m2.jpg\n-rw-r--r-- 1 lukas staff 656950 15 Apr 18:19 1776266371906_m2.jpg\n-rw-r--r-- 1 lukas staff 208873 15 Apr 18:19 1776266371909_m1.jpg\n-rw-r--r-- 1 lukas staff 596595 15 Apr 18:19 1776266374350_m2.jpg\n-rw-r--r-- 1 lukas staff 678600 15 Apr 18:19 1776266375785_m2.jpg\n-rw-r--r-- 1 lukas staff 208146 15 Apr 18:19 1776266377145_m1.jpg\n-rw-r--r-- 1 lukas staff 688844 15 Apr 18:19 1776266377145_m2.jpg\n-rw-r--r-- 1 lukas staff 208870 15 Apr 18:19 1776266384365_m1.jpg\n-rw-r--r-- 1 lukas staff 684366 15 Apr 18:19 1776266384403_m2.jpg\n-rw-r--r-- 1 lukas staff 208252 15 Apr 18:19 1776266386353_m1.jpg\n-rw-r--r-- 1 lukas staff 662242 15 Apr 18:19 1776266386874_m2.jpg\n-rw-r--r-- 1 lukas staff 208227 15 Apr 18:19 1776266388905_m1.jpg\n-rw-r--r-- 1 lukas staff 669929 15 Apr 18:19 1776266389162_m2.jpg\n-rw-r--r-- 1 lukas staff 564108 15 Apr 18:19 1776266394415_m2.jpg\n-rw-r--r-- 1 lukas staff 208254 15 Apr 18:19 1776266394669_m1.jpg\n-rw-r--r-- 1 lukas staff 597473 15 Apr 18:19 1776266397429_m2.jpg\n-rw-r--r-- 1 lukas staff 208197 15 Apr 18:19 1776266398122_m1.jpg\n-rw-r--r-- 1 lukas staff 588253 15 Apr 18:19 1776266398654_m2.jpg\n-rw-r--r-- 1 lukas staff 208263 15 Apr 18:20 1776266400169_m1.jpg\n-rw-r--r-- 1 lukas staff 590676 15 Apr 18:20 1776266400800_m2.jpg\n-rw-r--r-- 1 lukas staff 660135 15 Apr 18:20 1776266403120_m2.jpg\n-rw-r--r-- 1 lukas staff 208198 15 Apr 18:20 1776266404315_m1.jpg\n-rw-r--r-- 1 lukas staff 663732 15 Apr 18:20 1776266404344_m2.jpg\n-rw-r--r-- 1 lukas staff 676367 15 Apr 18:20 1776266410701_m2.jpg\n-rw-r--r-- 1 lukas staff 208239 15 Apr 18:20 1776266410716_m1.jpg\n-rw-r--r-- 1 lukas staff 208866 15 Apr 18:20 1776266423385_m1.jpg\n-rw-r--r-- 1 lukas staff 690762 15 Apr 18:20 1776266423399_m2.jpg\n-rw-r--r-- 1 lukas staff 672619 15 Apr 18:20 1776266426942_m2.jpg\n-rw-r--r-- 1 lukas staff 208889 15 Apr 18:20 1776266426971_m1.jpg\n-rw-r--r-- 1 lukas staff 208218 15 Apr 18:20 1776266430808_m1.jpg\n-rw-r--r-- 1 lukas staff 671881 15 Apr 18:20 1776266430808_m2.jpg\n-rw-r--r-- 1 lukas staff 208183 15 Apr 18:20 1776266433623_m1.jpg\n-rw-r--r-- 1 lukas staff 674761 15 Apr 18:20 1776266433670_m2.jpg\n-rw-r--r-- 1 lukas staff 208217 15 Apr 18:20 1776266436240_m1.jpg\n-rw-r--r-- 1 lukas staff 670159 15 Apr 18:20 1776266436263_m2.jpg\n-rw-r--r-- 1 lukas staff 208182 15 Apr 18:20 1776266438629_m1.jpg\n-rw-r--r-- 1 lukas staff 668057 15 Apr 18:20 1776266438638_m2.jpg\n-rw-r--r-- 1 lukas staff 208906 15 Apr 18:20 1776266442252_m1.jpg\n-rw-r--r-- 1 lukas staff 672509 15 Apr 18:20 1776266442293_m2.jpg\n-rw-r--r-- 1 lukas staff 208955 15 Apr 18:20 1776266444286_m1.jpg\n-rw-r--r-- 1 lukas staff 669667 15 Apr 18:20 1776266444713_m2.jpg\n-rw-r--r-- 1 lukas staff 711375 15 Apr 18:20 1776266446659_m2.jpg\n-rw-r--r-- 1 lukas staff 208164 15 Apr 18:20 1776266447514_m1.jpg\n-rw-r--r-- 1 lukas staff 739201 15 Apr 18:20 1776266448562_m2.jpg\n-rw-r--r-- 1 lukas staff 208600 15 Apr 18:20 1776266450066_m1.jpg\n-rw-r--r-- 1 lukas staff 735015 15 Apr 18:20 1776266450077_m2.jpg\n-rw-r--r-- 1 lukas staff 602085 15 Apr 18:20 1776266452815_m2.jpg\n-rw-r--r-- 1 lukas staff 554910 15 Apr 18:20 1776266455812_m2.jpg\n-rw-r--r-- 1 lukas staff 208706 15 Apr 18:20 1776266457074_m1.jpg\n-rw-r--r-- 1 lukas staff 668265 15 Apr 18:20 1776266457218_m2.jpg\n-rw-r--r-- 1 lukas staff 627127 15 Apr 18:21 1776266462398_m2.jpg\n-rw-r--r-- 1 lukas staff 651254 15 Apr 18:21 1776266464654_m2.jpg\n-rw-r--r-- 1 lukas staff 208782 15 Apr 18:21 1776266464655_m1.jpg\n-rw-r--r-- 1 lukas staff 208337 15 Apr 18:21 1776266467161_m1.jpg\n-rw-r--r-- 1 lukas staff 675477 15 Apr 18:21 1776266467769_m2.jpg\n-rw-r--r-- 1 lukas staff 208352 15 Apr 18:21 1776266470056_m1.jpg\n-rw-r--r-- 1 lukas staff 646287 15 Apr 18:21 1776266470426_m2.jpg\n-rw-r--r-- 1 lukas staff 208441 15 Apr 18:21 1776266472480_m1.jpg\n-rw-r--r-- 1 lukas staff 670331 15 Apr 18:21 1776266473095_m2.jpg\n-rw-r--r-- 1 lukas staff 208409 15 Apr 18:21 1776266474797_m1.jpg\n-rw-r--r-- 1 lukas staff 658783 15 Apr 18:21 1776266475129_m2.jpg\n-rw-r--r-- 1 lukas staff 208807 15 Apr 18:21 1776266476839_m1.jpg\n-rw-r--r-- 1 lukas staff 658240 15 Apr 18:21 1776266477168_m2.jpg\n-rw-r--r-- 1 lukas staff 208844 15 Apr 18:21 1776266478922_m1.jpg\n-rw-r--r-- 1 lukas staff 666996 15 Apr 18:21 1776266479271_m2.jpg\n-rw-r--r-- 1 lukas staff 699189 15 Apr 18:21 1776266481646_m2.jpg\n-rw-r--r-- 1 lukas staff 708975 15 Apr 18:21 1776266482907_m2.jpg\n-rw-r--r-- 1 lukas staff 682317 15 Apr 18:21 1776266487203_m2.jpg\n-rw-r--r-- 1 lukas staff 209118 15 Apr 18:21 1776266489247_m1.jpg\n-rw-r--r-- 1 lukas staff 687083 15 Apr 18:21 1776266489247_m2.jpg\n-rw-r--r-- 1 lukas staff 209082 15 Apr 18:21 1776266491199_m1.jpg\n-rw-r--r-- 1 lukas staff 676433 15 Apr 18:21 1776266492289_m2.jpg\n-rw-r--r-- 1 lukas staff 209174 15 Apr 18:21 1776266493476_m1.jpg\n-rw-r--r-- 1 lukas staff 668920 15 Apr 18:21 1776266493678_m2.jpg\n-rw-r--r-- 1 lukas staff 208388 15 Apr 18:21 1776266497984_m1.jpg\n-rw-r--r-- 1 lukas staff 652067 15 Apr 18:21 1776266497984_m2.jpg\n-rw-r--r-- 1 lukas staff 208298 15 Apr 18:21 1776266501940_m1.jpg\n-rw-r--r-- 1 lukas staff 632049 15 Apr 18:21 1776266501960_m2.jpg\n-rw-r--r-- 1 lukas staff 208349 15 Apr 18:21 1776266503799_m1.jpg\n-rw-r--r-- 1 lukas staff 643154 15 Apr 18:21 1776266504159_m2.jpg\n-rw-r--r-- 1 lukas staff 634868 15 Apr 18:21 1776266507710_m2.jpg\n-rw-r--r-- 1 lukas staff 208376 15 Apr 18:21 1776266507750_m1.jpg\n-rw-r--r-- 1 lukas staff 208249 15 Apr 18:21 1776266509896_m1.jpg\n-rw-r--r-- 1 lukas staff 659743 15 Apr 18:21 1776266510358_m2.jpg\n-rw-r--r-- 1 lukas staff 675221 15 Apr 18:21 1776266512596_m2.jpg\n-rw-r--r-- 1 lukas staff 699120 15 Apr 18:21 1776266513811_m2.jpg\n-rw-r--r-- 1 lukas staff 208799 15 Apr 18:21 1776266513915_m1.jpg\n-rw-r--r-- 1 lukas staff 661306 15 Apr 18:21 1776266517106_m2.jpg\n-rw-r--r-- 1 lukas staff 208768 15 Apr 18:21 1776266519085_m1.jpg\n-rw-r--r-- 1 lukas staff 654783 15 Apr 18:21 1776266519085_m2.jpg\n-rw-r--r-- 1 lukas staff 657014 15 Apr 18:22 1776266521775_m2.jpg\n-rw-r--r-- 1 lukas staff 208743 15 Apr 18:22 1776266521905_m1.jpg\n-rw-r--r-- 1 lukas staff 208765 15 Apr 18:22 1776266523982_m1.jpg\n-rw-r--r-- 1 lukas staff 676963 15 Apr 18:22 1776266524383_m2.jpg\n-rw-r--r-- 1 lukas staff 208595 15 Apr 18:22 1776266525995_m1.jpg\n-rw-r--r-- 1 lukas staff 679026 15 Apr 18:22 1776266526331_m2.jpg\n-rw-r--r-- 1 lukas staff 208601 15 Apr 18:22 1776266527968_m1.jpg\n-rw-r--r-- 1 lukas staff 691434 15 Apr 18:22 1776266528359_m2.jpg\n-rw-r--r-- 1 lukas staff 208790 15 Apr 18:22 1776266530045_m1.jpg\n-rw-r--r-- 1 lukas staff 617327 15 Apr 18:22 1776266530409_m2.jpg\n-rw-r--r-- 1 lukas staff 208821 15 Apr 18:22 1776266532371_m1.jpg\n-rw-r--r-- 1 lukas staff 695409 15 Apr 18:22 1776266532643_m2.jpg\n-rw-r--r-- 1 lukas staff 692244 15 Apr 18:22 1776266534764_m2.jpg\n-rw-r--r-- 1 lukas staff 701793 15 Apr 18:22 1776266538373_m2.jpg\n-rw-r--r-- 1 lukas staff 208219 15 Apr 18:22 1776266538394_m1.jpg\n-rw-r--r-- 1 lukas staff 671959 15 Apr 18:22 1776266540698_m2.jpg\n-rw-r--r-- 1 lukas staff 208351 15 Apr 18:22 1776266541977_m1.jpg\n-rw-r--r-- 1 lukas staff 666355 15 Apr 18:22 1776266541977_m2.jpg\n-rw-r--r-- 1 lukas staff 208360 15 Apr 18:22 1776266543911_m1.jpg\n-rw-r--r-- 1 lukas staff 682036 15 Apr 18:22 1776266544351_m2.jpg\n-rw-r--r-- 1 lukas staff 209141 15 Apr 18:22 1776266546119_m1.jpg\n-rw-r--r-- 1 lukas staff 678365 15 Apr 18:22 1776266546536_m2.jpg\n-rw-r--r-- 1 lukas staff 209146 15 Apr 18:22 1776266548258_m1.jpg\n-rw-r--r-- 1 lukas staff 676342 15 Apr 18:22 1776266548725_m2.jpg\n-rw-r--r-- 1 lukas staff 209085 15 Apr 18:22 1776266550501_m1.jpg\n-rw-r--r-- 1 lukas staff 676211 15 Apr 18:22 1776266550967_m2.jpg\n-rw-r--r-- 1 lukas staff 209119 15 Apr 18:22 1776266552643_m1.jpg\n-rw-r--r-- 1 lukas staff 628801 15 Apr 18:22 1776266553078_m2.jpg\n-rw-r--r-- 1 lukas staff 209015 15 Apr 18:22 1776266554763_m1.jpg\n-rw-r--r-- 1 lukas staff 622953 15 Apr 18:22 1776266555141_m2.jpg\n-rw-r--r-- 1 lukas staff 208376 15 Apr 18:22 1776266556828_m1.jpg\n-rw-r--r-- 1 lukas staff 624322 15 Apr 18:22 1776266557207_m2.jpg\n-rw-r--r-- 1 lukas staff 208394 15 Apr 18:22 1776266559394_m1.jpg\n-rw-r--r-- 1 lukas staff 644831 15 Apr 18:22 1776266559750_m2.jpg\n-rw-r--r-- 1 lukas staff 208349 15 Apr 18:22 1776266561640_m1.jpg\n-rw-r--r-- 1 lukas staff 675478 15 Apr 18:22 1776266562198_m2.jpg\n-rw-r--r-- 1 lukas staff 208221 15 Apr 18:22 1776266564068_m1.jpg\n-rw-r--r-- 1 lukas staff 684799 15 Apr 18:22 1776266564562_m2.jpg\n-rw-r--r-- 1 lukas staff 208266 15 Apr 18:22 1776266566774_m1.jpg\n-rw-r--r-- 1 lukas staff 683359 15 Apr 18:22 1776266567099_m2.jpg\n-rw-r--r-- 1 lukas staff 208351 15 Apr 18:22 1776266568684_m1.jpg\n-rw-r--r-- 1 lukas staff 674951 15 Apr 18:22 1776266569007_m2.jpg\n-rw-r--r-- 1 lukas staff 208266 15 Apr 18:22 1776266570769_m1.jpg\n-rw-r--r-- 1 lukas staff 620972 15 Apr 18:22 1776266571289_m2.jpg\n-rw-r--r-- 1 lukas staff 208184 15 Apr 18:22 1776266573044_m1.jpg\n-rw-r--r-- 1 lukas staff 596908 15 Apr 18:22 1776266573459_m2.jpg\n-rw-r--r-- 1 lukas staff 208118 15 Apr 18:22 1776266575226_m1.jpg\n-rw-r--r-- 1 lukas staff 595063 15 Apr 18:22 1776266575765_m2.jpg\n-rw-r--r-- 1 lukas staff 208151 15 Apr 18:22 1776266577746_m1.jpg\n-rw-r--r-- 1 lukas staff 601762 15 Apr 18:22 1776266578123_m2.jpg\n-rw-r--r-- 1 lukas staff 208554 15 Apr 18:23 1776266580050_m1.jpg\n-rw-r--r-- 1 lukas staff 600430 15 Apr 18:23 1776266580291_m2.jpg\n-rw-r--r-- 1 lukas staff 208707 15 Apr 18:23 1776266582019_m1.jpg\n-rw-r--r-- 1 lukas staff 673088 15 Apr 18:23 1776266582317_m2.jpg\n-rw-r--r-- 1 lukas staff 208733 15 Apr 18:23 1776266584164_m1.jpg\n-rw-r--r-- 1 lukas staff 688362 15 Apr 18:23 1776266584473_m2.jpg\n-rw-r--r-- 1 lukas staff 208745 15 Apr 18:23 1776266586377_m1.jpg\n-rw-r--r-- 1 lukas staff 687179 15 Apr 18:23 1776266586902_m2.jpg\n-rw-r--r-- 1 lukas staff 208294 15 Apr 18:23 1776266588885_m1.jpg\n-rw-r--r-- 1 lukas staff 706828 15 Apr 18:23 1776266589319_m2.jpg\n-rw-r--r-- 1 lukas staff 208256 15 Apr 18:23 1776266591044_m1.jpg\n-rw-r--r-- 1 lukas staff 691748 15 Apr 18:23 1776266591559_m2.jpg\n-rw-r--r-- 1 lukas staff 686194 15 Apr 18:23 1776266593540_m2.jpg\n-rw-r--r-- 1 lukas staff 684706 15 Apr 18:23 1776266594510_m2.jpg\n-rw-r--r-- 1 lukas staff 208192 15 Apr 18:23 1776266594557_m1.jpg\n-rw-r--r-- 1 lukas staff 669321 15 Apr 18:23 1776266596804_m2.jpg\n-rw-r--r-- 1 lukas staff 677396 15 Apr 18:23 1776266597789_m2.jpg\n-rw-r--r-- 1 lukas staff 683261 15 Apr 18:23 1776266598784_m2.jpg\n-rw-r--r-- 1 lukas staff 685463 15 Apr 18:23 1776266599817_m2.jpg\n-rw-r--r-- 1 lukas staff 681856 15 Apr 18:23 1776266601197_m2.jpg\n-rw-r--r-- 1 lukas staff 678002 15 Apr 18:23 1776266604376_m2.jpg\n-rw-r--r-- 1 lukas staff 207973 15 Apr 18:23 1776266604386_m1.jpg\n-rw-r--r-- 1 lukas staff 208398 15 Apr 18:23 1776266606500_m1.jpg\n-rw-r--r-- 1 lukas staff 726978 15 Apr 18:23 1776266606726_m2.jpg\n-rw-r--r-- 1 lukas staff 208382 15 Apr 18:23 1776266608483_m1.jpg\n-rw-r--r-- 1 lukas staff 695186 15 Apr 18:23 1776266608675_m2.jpg\n-rw-r--r-- 1 lukas staff 684881 15 Apr 18:23 1776266610836_m2.jpg\n-rw-r--r-- 1 lukas staff 208351 15 Apr 18:23 1776266610849_m1.jpg\n-rw-r--r-- 1 lukas staff 208371 15 Apr 18:23 1776266612653_m1.jpg\n-rw-r--r-- 1 lukas staff 702368 15 Apr 18:23 1776266613019_m2.jpg\n-rw-r--r-- 1 lukas staff 208311 15 Apr 18:23 1776266614754_m1.jpg\n-rw-r--r-- 1 lukas staff 697167 15 Apr 18:23 1776266615197_m2.jpg\n-rw-r--r-- 1 lukas staff 208256 15 Apr 18:23 1776266617001_m1.jpg\n-rw-r--r-- 1 lukas staff 708464 15 Apr 18:23 1776266617412_m2.jpg\n-rw-r--r-- 1 lukas staff 208402 15 Apr 18:23 1776266619249_m1.jpg\n-rw-r--r-- 1 lukas staff 724407 15 Apr 18:23 1776266619671_m2.jpg\n-rw-r--r-- 1 lukas staff 208307 15 Apr 18:23 1776266621180_m1.jpg\n-rw-r--r-- 1 lukas staff 725296 15 Apr 18:23 1776266621573_m2.jpg\n-rw-r--r-- 1 lukas staff 730086 15 Apr 18:23 1776266623619_m2.jpg\n-rw-r--r-- 1 lukas staff 208318 15 Apr 18:23 1776266624686_m1.jpg\n-rw-r--r-- 1 lukas staff 725848 15 Apr 18:23 1776266624788_m2.jpg\n-rw-r--r-- 1 lukas staff 208308 15 Apr 18:23 1776266628918_m1.jpg\n-rw-r--r-- 1 lukas staff 732348 15 Apr 18:23 1776266628918_m2.jpg\n-rw-r--r-- 1 lukas staff 710253 15 Apr 18:23 1776266631933_m2.jpg\n-rw-r--r-- 1 lukas staff 710294 15 Apr 18:23 1776266634975_m2.jpg\n-rw-r--r-- 1 lukas staff 208400 15 Apr 18:23 1776266635249_m1.jpg\n-rw-r--r-- 1 lukas staff 667620 15 Apr 18:23 1776266638013_m2.jpg\n-rw-r--r-- 1 lukas staff 693071 15 Apr 18:24 1776266641062_m2.jpg\n-rw-r--r-- 1 lukas staff 675607 15 Apr 18:24 1776266644087_m2.jpg\n-rw-r--r-- 1 lukas staff 208309 15 Apr 18:24 1776266646104_m1.jpg\n-rw-r--r-- 1 lukas staff 699155 15 Apr 18:24 1776266646104_m2.jpg\n-rw-r--r-- 1 lukas staff 636312 15 Apr 18:24 1776266648468_m2.jpg\n-rw-r--r-- 1 lukas staff 208823 15 Apr 18:24 1776266649991_m1.jpg\n-rw-r--r-- 1 lukas staff 677743 15 Apr 18:24 1776266649991_m2.jpg\n-rw-r--r-- 1 lukas staff 285273 15 Apr 18:24 1776266655380_m2.jpg\n-rw-r--r-- 1 lukas staff 208338 15 Apr 18:24 1776266656348_m1.jpg\n-rw-r--r-- 1 lukas staff 299758 15 Apr 18:24 1776266657887_m2.jpg\n-rw-r--r-- 1 lukas staff 208905 15 Apr 18:24 1776266660014_m1.jpg\n-rw-r--r-- 1 lukas staff 505543 15 Apr 18:24 1776266660357_m2.jpg\n-rw-r--r-- 1 lukas staff 130773 15 Apr 18:24 1776266662583_m2.jpg\n-rw-r--r-- 1 lukas staff 208837 15 Apr 18:24 1776266662590_m1.jpg\n-rw-r--r-- 1 lukas staff 131262 15 Apr 18:24 1776266665030_m2.jpg\n-rw-r--r-- 1 lukas staff 208543 15 Apr 18:24 1776266665178_m1.jpg\n-rw-r--r-- 1 lukas staff 82600 15 Apr 18:24 1776266668094_m2.jpg\n-rw-r--r-- 1 lukas staff 99799 15 Apr 18:24 1776266671070_m2.jpg\n-rw-r--r-- 1 lukas staff 209265 15 Apr 18:24 1776266671742_m1.jpg\n-rw-r--r-- 1 lukas staff 69569 15 Apr 18:24 1776266672855_m2.jpg\n-rw-r--r-- 1 lukas staff 233878 15 Apr 18:24 1776266675463_m2.jpg\n-rw-r--r-- 1 lukas staff 233944 15 Apr 18:24 1776266676686_m2.jpg\n-rw-r--r-- 1 lukas staff 208529 15 Apr 18:24 1776266676718_m1.jpg\n-rw-r--r-- 1 lukas staff 208411 15 Apr 18:24 1776266678430_m1.jpg\n-rw-r--r-- 1 lukas staff 275989 15 Apr 18:24 1776266678431_m2.jpg\n-rw-r--r-- 1 lukas staff 258903 15 Apr 18:24 1776266679106_m2.jpg\n-rw-r--r-- 1 lukas staff 278951 15 Apr 18:24 1776266682164_m2.jpg\n-rw-r--r-- 1 lukas staff 208465 15 Apr 18:24 1776266687272_m1.jpg\n-rw-r--r-- 1 lukas staff 208398 15 Apr 18:24 1776266690323_m1.jpg\n-rw-r--r-- 1 lukas staff 273693 15 Apr 18:24 1776266691227_m2.jpg\n-rw-r--r-- 1 lukas staff 185943 15 Apr 18:24 1776266696382_m1.jpg\n-rw-r--r-- 1 lukas staff 271869 15 Apr 18:24 1776266697274_m2.jpg\n-rw-r--r-- 1 lukas staff 366699 15 Apr 18:25 1776266705465_m1.jpg\n-rw-r--r-- 1 lukas staff 186079 15 Apr 18:25 1776266708505_m1.jpg\n-rw-r--r-- 1 lukas staff 276639 15 Apr 18:38 1776267525892_m1.jpg\n-rw-r--r-- 1 lukas staff 282408 15 Apr 18:38 1776267527527_m2.jpg\n-rw-r--r-- 1 lukas staff 282541 15 Apr 18:38 1776267533056_m1.jpg\n-rw-r--r-- 1 lukas staff 1292480 15 Apr 10:09 compact_monitor_1_1776236979346.mp4\n-rw-r--r-- 1 lukas staff 6304039 15 Apr 10:14 compact_monitor_1_1776237284692.mp4\n-rw-r--r-- 1 lukas staff 2514313 15 Apr 10:19 compact_monitor_1_1776237595554.mp4\n-rw-r--r-- 1 lukas staff 2821904 15 Apr 10:25 compact_monitor_1_1776237899635.mp4\n-rw-r--r-- 1 lukas staff 2785297 15 Apr 10:30 compact_monitor_1_1776238207393.mp4\n-rw-r--r-- 1 lukas staff 1639472 15 Apr 10:35 compact_monitor_1_1776238512537.mp4\n-rw-r--r-- 1 lukas staff 3207933 15 Apr 10:40 compact_monitor_1_1776238815528.mp4\n-rw-r--r-- 1 lukas staff 3594658 15 Apr 10:45 compact_monitor_1_1776239122381.mp4\n-rw-r--r-- 1 lukas staff 3671517 15 Apr 10:50 compact_monitor_1_1776239429225.mp4\n-rw-r--r-- 1 lukas staff 4031948 15 Apr 10:55 compact_monitor_1_1776239734998.mp4\n-rw-r--r-- 1 lukas staff 3529461 15 Apr 11:00 compact_monitor_1_1776240042925.mp4\n-rw-r--r-- 1 lukas staff 5234845 15 Apr 11:05 compact_monitor_1_1776240349311.mp4\n-rw-r--r-- 1 lukas staff 3323085 15 Apr 11:11 compact_monitor_1_1776240657823.mp4\n-rw-r--r-- 1 lukas staff 2204215 15 Apr 11:16 compact_monitor_1_1776240963306.mp4\n-rw-r--r-- 1 lukas staff 2387534 15 Apr 11:21 compact_monitor_1_1776241266776.mp4\n-rw-r--r-- 1 lukas staff 4921676 15 Apr 11:26 compact_monitor_1_1776241570939.mp4\n-rw-r--r-- 1 lukas staff 2135612 15 Apr 11:31 compact_monitor_1_1776241878162.mp4\n-rw-r--r-- 1 lukas staff 494014 15 Apr 11:36 compact_monitor_1_1776242182944.mp4\n-rw-r--r-- 1 lukas staff 1986658 15 Apr 11:41 compact_monitor_1_1776242488565.mp4\n-rw-r--r-- 1 lukas staff 1651327 15 Apr 11:46 compact_monitor_1_1776242792386.mp4\n-rw-r--r-- 1 lukas staff 190056 15 Apr 11:51 compact_monitor_1_1776243099454.mp4\n-rw-r--r-- 1 lukas staff 489195 15 Apr 11:56 compact_monitor_1_1776243401560.mp4\n-rw-r--r-- 1 lukas staff 637245 15 Apr 12:01 compact_monitor_1_1776243707339.mp4\n-rw-r--r-- 1 lukas staff 836102 15 Apr 12:06 compact_monitor_1_1776244016111.mp4\n-rw-r--r-- 1 lukas staff 2250311 15 Apr 12:12 compact_monitor_1_1776244325248.mp4\n-rw-r--r-- 1 lukas staff 4438961 15 Apr 12:17 compact_monitor_1_1776244633485.mp4\n-rw-r--r-- 1 lukas staff 2024811 15 Apr 12:22 compact_monitor_1_1776244939105.mp4\n-rw-r--r-- 1 lukas staff 1140502 15 Apr 12:27 compact_monitor_1_1776245242576.mp4\n-rw-r--r-- 1 lukas staff 818870 15 Apr 12:32 compact_monitor_1_1776245545145.mp4\n-rw-r--r-- 1 lukas staff 506104 15 Apr 12:37 compact_monitor_1_1776245850845.mp4\n-rw-r--r-- 1 lukas staff 506372 15 Apr 12:42 compact_monitor_1_1776246157330.mp4\n-rw-r--r-- 1 lukas staff 585365 15 Apr 12:47 compact_monitor_1_1776246461621.mp4\n-rw-r--r-- 1 lukas staff 1536187 15 Apr 12:52 compact_monitor_1_1776246766463.mp4\n-rw-r--r-- 1 lukas staff 2825443 15 Apr 12:57 compact_monitor_1_1776247072489.mp4\n-rw-r--r-- 1 lukas staff 3094796 15 Apr 13:03 compact_monitor_1_1776247379957.mp4\n-rw-r--r-- 1 lukas staff 396633 15 Apr 13:08 compact_monitor_1_1776247688246.mp4\n-rw-r--r-- 1 lukas staff 909684 15 Apr 13:13 compact_monitor_1_1776247993728.mp4\n-rw-r--r-- 1 lukas staff 1577484 15 Apr 13:18 compact_monitor_1_1776248301121.mp4\n-rw-r--r-- 1 lukas staff 1079237 15 Apr 13:23 compact_monitor_1_1776248607315.mp4\n-rw-r--r-- 1 lukas staff 1091368 15 Apr 13:28 compact_monitor_1_1776248924298.mp4\n-rw-r--r-- 1 lukas staff 925798 15 Apr 13:34 compact_monitor_1_1776249241863.mp4\n-rw-r--r-- 1 lukas staff 1024193 15 Apr 13:39 compact_monitor_1_1776249553464.mp4\n-rw-r--r-- 1 lukas staff 1965175 15 Apr 13:44 compact_monitor_1_1776249871482.mp4\n-rw-r--r-- 1 lukas staff 942071 15 Apr 13:49 compact_monitor_1_1776250182641.mp4\n-rw-r--r-- 1 lukas staff 1036861 15 Apr 13:55 compact_monitor_1_1776250503790.mp4\n-rw-r--r-- 1 lukas staff 1084939 15 Apr 14:00 compact_monitor_1_1776250829184.mp4\n-rw-r--r-- 1 lukas staff 1137305 15 Apr 14:05 compact_monitor_1_1776251148270.mp4\n-rw-r--r-- 1 lukas staff 1084917 15 Apr 14:13 compact_monitor_1_1776251623899.mp4\n-rw-r--r-- 1 lukas staff 472006 15 Apr 14:18 compact_monitor_1_1776251937854.mp4\n-rw-r--r-- 1 lukas staff 2195675 15 Apr 14:24 compact_monitor_1_1776252241210.mp4\n-rw-r--r-- 1 lukas staff 2126366 15 Apr 14:29 compact_monitor_1_1776252546881.mp4\n-rw-r--r-- 1 lukas staff 1223098 15 Apr 14:34 compact_monitor_1_1776252863758.mp4\n-rw-r--r-- 1 lukas staff 1554811 15 Apr 14:39 compact_monitor_1_1776253185709.mp4\n-rw-r--r-- 1 lukas staff 283980 15 Apr 14:39 compact_monitor_1_1776253191237.mp4\n-rw-r--r-- 1 lukas staff 1004738 15 Apr 14:45 compact_monitor_1_1776253502852.mp4\n-rw-r--r-- 1 lukas staff 1007213 15 Apr 14:50 compact_monitor_1_1776253806491.mp4\n-rw-r--r-- 1 lukas staff 1622820 15 Apr 14:55 compact_monitor_1_1776254109375.mp4\n-rw-r--r-- 1 lukas staff 1800819 15 Apr 15:00 compact_monitor_1_1776254415281.mp4\n-rw-r--r-- 1 lukas staff 1248853 15 Apr 15:05 compact_monitor_1_1776254720441.mp4\n-rw-r--r-- 1 lukas staff 1358099 15 Apr 15:10 compact_monitor_1_1776255026922.mp4\n-rw-r--r-- 1 lukas staff 1077547 15 Apr 15:15 compact_monitor_1_1776255334430.mp4\n-rw-r--r-- 1 lukas staff 1194727 15 Apr 15:20 compact_monitor_1_1776255638369.mp4\n-rw-r--r-- 1 lukas staff 1312132 15 Apr 15:25 compact_monitor_1_1776255944046.mp4\n-rw-r--r-- 1 lukas staff 2526518 15 Apr 15:30 compact_monitor_1_1776256247989.mp4\n-rw-r--r-- 1 lukas staff 2591568 15 Apr 15:35 compact_monitor_1_1776256553209.mp4\n-rw-r--r-- 1 lukas staff 347132 15 Apr 15:41 compact_monitor_1_1776256862331.mp4\n-rw-r--r-- 1 lukas staff 331422 15 Apr 15:46 compact_monitor_1_1776257183524.mp4\n-rw-r--r-- 1 lukas staff 1507338 15 Apr 15:51 compact_monitor_1_1776257499295.mp4\n-rw-r--r-- 1 lukas staff 1080123 15 Apr 15:57 compact_monitor_1_1776257818639.mp4\n-rw-r--r-- 1 lukas staff 1048617 15 Apr 16:02 compact_monitor_1_1776258139836.mp4\n-rw-r--r-- 1 lukas staff 1151460 15 Apr 16:07 compact_monitor_1_1776258462628.mp4\n-rw-r--r-- 1 lukas staff 1206649 15 Apr 16:13 compact_monitor_1_1776258784114.mp4\n-rw-r--r-- 1 lukas staff 1133984 15 Apr 16:18 compact_monitor_1_1776259107952.mp4\n-rw-r--r-- 1 lukas staff 1142984 15 Apr 16:23 compact_monitor_1_1776259433131.mp4\n-rw-r--r-- 1 lukas staff 1253153 15 Apr 16:29 compact_monitor_1_1776259757534.mp4\n-rw-r--r-- 1 lukas staff 998310 15 Apr 16:34 compact_monitor_1_1776260076664.mp4\n-rw-r--r-- 1 lukas staff 1065076 15 Apr 16:40 compact_monitor_1_1776260397335.mp4\n-rw-r--r-- 1 lukas staff 1099220 15 Apr 16:45 compact_monitor_1_1776260721850.mp4\n-rw-r--r-- 1 lukas staff 1154961 15 Apr 16:50 compact_monitor_1_1776261044836.mp4\n-rw-r--r-- 1 lukas staff 1065431 15 Apr 16:56 compact_monitor_1_1776261372103.mp4\n-rw-r--r-- 1 lukas staff 984542 15 Apr 17:01 compact_monitor_1_1776261696699.mp4\n-rw-r--r-- 1 lukas staff 451220 15 Apr 17:01 compact_monitor_1_1776261702497.mp4\n-rw-r--r-- 1 lukas staff 1211676 15 Apr 17:07 compact_monitor_1_1776262024768.mp4\n-rw-r--r-- 1 lukas staff 1161330 15 Apr 17:12 compact_monitor_1_1776262344982.mp4\n-rw-r--r-- 1 lukas staff 1052573 15 Apr 17:17 compact_monitor_1_1776262664755.mp4\n-rw-r--r-- 1 lukas staff 418716 15 Apr 17:17 compact_monitor_1_1776262670708.mp4\n-rw-r--r-- 1 lukas staff 1682982 15 Apr 17:23 compact_monitor_1_1776262992301.mp4\n-rw-r--r-- 1 lukas staff 1073481 15 Apr 17:28 compact_monitor_1_1776263309511.mp4\n-rw-r--r-- 1 lukas staff 1192672 15 Apr 17:34 compact_monitor_1_1776263636829.mp4\n-rw-r--r-- 1 lukas staff 383279 15 Apr 17:34 compact_monitor_1_1776263642876.mp4\n-rw-r--r-- 1 lukas staff 1357937 15 Apr 17:39 compact_monitor_1_1776263965549.mp4\n-rw-r--r-- 1 lukas staff 1057912 15 Apr 17:44 compact_monitor_1_1776264293030.mp4\n-rw-r--r-- 1 lukas staff 1055882 15 Apr 17:50 compact_monitor_1_1776264619470.mp4\n-rw-r--r-- 1 lukas staff 1173057 15 Apr 17:55 compact_monitor_1_1776264946265.mp4\n-rw-r--r-- 1 lukas staff 1162002 15 Apr 18:01 compact_monitor_1_1776265273041.mp4\n-rw-r--r-- 1 lukas staff 410666 15 Apr 18:01 compact_monitor_1_1776265279242.mp4\n-rw-r--r-- 1 lukas staff 1213530 15 Apr 18:06 compact_monitor_1_1776265602616.mp4\n-rw-r--r-- 1 lukas staff 1210935 15 Apr 18:12 compact_monitor_1_1776265929948.mp4\n-rw-r--r-- 1 lukas staff 355364 15 Apr 18:12 compact_monitor_1_1776265935884.mp4\n-rw-r--r-- 1 lukas staff 985021 15 Apr 18:17 compact_monitor_1_1776266259356.mp4\n-rw-r--r-- 1 lukas staff 448474 15 Apr 18:17 compact_monitor_1_1776266265353.mp4\n-rw-r--r-- 1 lukas staff 1007624 15 Apr 18:23 compact_monitor_1_1776266587803.mp4\n-rw-r--r-- 1 lukas staff 417702 15 Apr 18:23 compact_monitor_1_1776266593821.mp4\n-rw-r--r-- 1 lukas staff 3815275 15 Apr 10:09 compact_monitor_2_1776236981488.mp4\n-rw-r--r-- 1 lukas staff 3854792 15 Apr 10:14 compact_monitor_2_1776237291726.mp4\n-rw-r--r-- 1 lukas staff 367131 15 Apr 10:19 compact_monitor_2_1776237598300.mp4\n-rw-r--r-- 1 lukas staff 3965510 15 Apr 10:25 compact_monitor_2_1776237902921.mp4\n-rw-r--r-- 1 lukas staff 468839 15 Apr 10:30 compact_monitor_2_1776238211071.mp4\n-rw-r--r-- 1 lukas staff 395077 15 Apr 10:35 compact_monitor_2_1776238514343.mp4\n-rw-r--r-- 1 lukas staff 1309545 15 Apr 10:40 compact_monitor_2_1776238819191.mp4\n-rw-r--r-- 1 lukas staff 2579871 15 Apr 10:45 compact_monitor_2_1776239125548.mp4\n-rw-r--r-- 1 lukas staff 2261244 15 Apr 10:50 compact_monitor_2_1776239432484.mp4\n-rw-r--r-- 1 lukas staff 1614099 15 Apr 10:55 compact_monitor_2_1776239738314.mp4\n-rw-r--r-- 1 lukas staff 1396501 15 Apr 11:00 compact_monitor_2_1776240046668.mp4\n-rw-r--r-- 1 lukas staff 2608327 15 Apr 11:05 compact_monitor_2_1776240354465.mp4\n-rw-r--r-- 1 lukas staff 1343284 15 Apr 11:11 compact_monitor_2_1776240661129.mp4\n-rw-r--r-- 1 lukas staff 104083 15 Apr 11:16 compact_monitor_2_1776240965780.mp4\n-rw-r--r-- 1 lukas staff 1696225 15 Apr 11:21 compact_monitor_2_1776241269257.mp4\n-rw-r--r-- 1 lukas staff 3038037 15 Apr 11:26 compact_monitor_2_1776241574093.mp4\n-rw-r--r-- 1 lukas staff 2308673 15 Apr 11:31 compact_monitor_2_1776241879955.mp4\n-rw-r--r-- 1 lukas staff 3684492 15 Apr 11:36 compact_monitor_2_1776242185232.mp4\n-rw-r--r-- 1 lukas staff 1318134 15 Apr 11:41 compact_monitor_2_1776242490310.mp4\n-rw-r--r-- 1 lukas staff 2429835 15 Apr 11:46 compact_monitor_2_1776242794849.mp4\n-rw-r--r-- 1 lukas staff 760204 15 Apr 11:51 compact_monitor_2_1776243100430.mp4\n-rw-r--r-- 1 lukas staff 2563357 15 Apr 11:56 compact_monitor_2_1776243402772.mp4\n-rw-r--r-- 1 lukas staff 2270439 15 Apr 12:01 compact_monitor_2_1776243709288.mp4\n-rw-r--r-- 1 lukas staff 1591957 15 Apr 12:07 compact_monitor_2_1776244019480.mp4\n-rw-r--r-- 1 lukas staff 1448741 15 Apr 12:12 compact_monitor_2_1776244328555.mp4\n-rw-r--r-- 1 lukas staff 3297885 15 Apr 12:17 compact_monitor_2_1776244636345.mp4\n-rw-r--r-- 1 lukas staff 1088455 15 Apr 12:22 compact_monitor_2_1776244941048.mp4\n-rw-r--r-- 1 lukas staff 398901 15 Apr 12:27 compact_monitor_2_1776245243901.mp4\n-rw-r--r-- 1 lukas staff 1511792 15 Apr 12:32 compact_monitor_2_1776245547006.mp4\n-rw-r--r-- 1 lukas staff 1331771 15 Apr 12:37 compact_monitor_2_1776245852471.mp4\n-rw-r--r-- 1 lukas staff 923996 15 Apr 12:42 compact_monitor_2_1776246158613.mp4\n-rw-r--r-- 1 lukas staff 2568982 15 Apr 12:47 compact_monitor_2_1776246463035.mp4\n-rw-r--r-- 1 lukas staff 3313949 15 Apr 12:52 compact_monitor_2_1776246768685.mp4\n-rw-r--r-- 1 lukas staff 4771645 15 Apr 12:57 compact_monitor_2_1776247076079.mp4\n-rw-r--r-- 1 lukas staff 6586185 15 Apr 13:03 compact_monitor_2_1776247382530.mp4\n-rw-r--r-- 1 lukas staff 2358604 15 Apr 13:08 compact_monitor_2_1776247690007.mp4\n-rw-r--r-- 1 lukas staff 2980294 15 Apr 13:13 compact_monitor_2_1776247996783.mp4\n-rw-r--r-- 1 lukas staff 3036356 15 Apr 13:18 compact_monitor_2_1776248303327.mp4\n-rw-r--r-- 1 lukas staff 13739308 15 Apr 13:23 compact_monitor_2_1776248612102.mp4\n-rw-r--r-- 1 lukas staff 1792715 15 Apr 13:23 compact_monitor_2_1776248622198.mp4\n-rw-r--r-- 1 lukas staff 19438020 15 Apr 13:28 compact_monitor_2_1776248929123.mp4\n-rw-r--r-- 1 lukas staff 1542891 15 Apr 13:29 compact_monitor_2_1776248939710.mp4\n-rw-r--r-- 1 lukas staff 18764167 15 Apr 13:34 compact_monitor_2_1776249244616.mp4\n-rw-r--r-- 1 lukas staff 29428799 15 Apr 13:39 compact_monitor_2_1776249557895.mp4\n-rw-r--r-- 1 lukas staff 12512925 15 Apr 13:44 compact_monitor_2_1776249875231.mp4\n-rw-r--r-- 1 lukas staff 30936872 15 Apr 13:50 compact_monitor_2_1776250186990.mp4\n-rw-r--r-- 1 lukas staff 2793009 15 Apr 13:50 compact_monitor_2_1776250201560.mp4\n-rw-r--r-- 1 lukas staff 33052595 15 Apr 13:55 compact_monitor_2_1776250510466.mp4\n-rw-r--r-- 1 lukas staff 8811443 15 Apr 13:55 compact_monitor_2_1776250525325.mp4\n-rw-r--r-- 1 lukas staff 36732130 15 Apr 14:00 compact_monitor_2_1776250833909.mp4\n-rw-r--r-- 1 lukas staff 808116 15 Apr 14:00 compact_monitor_2_1776250847678.mp4\n-rw-r--r-- 1 lukas staff 35963507 15 Apr 14:06 compact_monitor_2_1776251153283.mp4\n-rw-r--r-- 1 lukas staff 17255576 15 Apr 14:13 compact_monitor_2_1776251627877.mp4\n-rw-r--r-- 1 lukas staff 217409 15 Apr 14:18 compact_monitor_2_1776251938719.mp4\n-rw-r--r-- 1 lukas staff 2179896 15 Apr 14:24 compact_monitor_2_1776252243501.mp4\n-rw-r--r-- 1 lukas staff 24202787 15 Apr 14:29 compact_monitor_2_1776252550645.mp4\n-rw-r--r-- 1 lukas staff 40541441 15 Apr 14:34 compact_monitor_2_1776252869026.mp4\n-rw-r--r-- 1 lukas staff 1969819 15 Apr 14:34 compact_monitor_2_1776252884388.mp4\n-rw-r--r-- 1 lukas staff 26185693 15 Apr 14:40 compact_monitor_2_1776253191567.mp4\n-rw-r--r-- 1 lukas staff 2958445 15 Apr 14:45 compact_monitor_2_1776253504333.mp4\n-rw-r--r-- 1 lukas staff 1721625 15 Apr 14:50 compact_monitor_2_1776253807794.mp4\n-rw-r--r-- 1 lukas staff 5168799 15 Apr 14:55 compact_monitor_2_1776254111721.mp4\n-rw-r--r-- 1 lukas staff 1008125 15 Apr 15:00 compact_monitor_2_1776254418941.mp4\n-rw-r--r-- 1 lukas staff 2805751 15 Apr 15:05 compact_monitor_2_1776254723846.mp4\n-rw-r--r-- 1 lukas staff 4263256 15 Apr 15:10 compact_monitor_2_1776255030878.mp4\n-rw-r--r-- 1 lukas staff 1855151 15 Apr 15:15 compact_monitor_2_1776255336562.mp4\n-rw-r--r-- 1 lukas staff 1068172 15 Apr 15:20 compact_monitor_2_1776255640728.mp4\n-rw-r--r-- 1 lukas staff 393423 15 Apr 15:25 compact_monitor_2_1776255946991.mp4\n-rw-r--r-- 1 lukas staff 1066924 15 Apr 15:30 compact_monitor_2_1776256250851.mp4\n-rw-r--r-- 1 lukas staff 4522183 15 Apr 15:36 compact_monitor_2_1776256557162.mp4\n-rw-r--r-- 1 lukas staff 21285442 15 Apr 15:41 compact_monitor_2_1776256868069.mp4\n-rw-r--r-- 1 lukas staff 4799464 15 Apr 15:41 compact_monitor_2_1776256880438.mp4\n-rw-r--r-- 1 lukas staff 25082442 15 Apr 15:46 compact_monitor_2_1776257187591.mp4\n-rw-r--r-- 1 lukas staff 29377114 15 Apr 15:51 compact_monitor_2_1776257503657.mp4\n-rw-r--r-- 1 lukas staff 2577148 15 Apr 15:51 compact_monitor_2_1776257516759.mp4\n-rw-r--r-- 1 lukas staff 35197312 15 Apr 15:57 compact_monitor_2_1776257823244.mp4\n-rw-r--r-- 1 lukas staff 739380 15 Apr 15:57 compact_monitor_2_1776257838858.mp4\n-rw-r--r-- 1 lukas staff 39595503 15 Apr 16:02 compact_monitor_2_1776258144789.mp4\n-rw-r--r-- 1 lukas staff 2671413 15 Apr 16:02 compact_monitor_2_1776258160717.mp4\n-rw-r--r-- 1 lukas staff 33576004 15 Apr 16:08 compact_monitor_2_1776258467332.mp4\n-rw-r--r-- 1 lukas staff 3404945 15 Apr 16:08 compact_monitor_2_1776258481869.mp4\n-rw-r--r-- 1 lukas staff 36386887 15 Apr 16:13 compact_monitor_2_1776258789278.mp4\n-rw-r--r-- 1 lukas staff 2717076 15 Apr 16:13 compact_monitor_2_1776258804257.mp4\n-rw-r--r-- 1 lukas staff 38542946 15 Apr 16:18 compact_monitor_2_1776259112717.mp4\n-rw-r--r-- 1 lukas staff 6480087 15 Apr 16:18 compact_monitor_2_1776259128284.mp4\n-rw-r--r-- 1 lukas staff 39076466 15 Apr 16:24 compact_monitor_2_1776259438063.mp4\n-rw-r--r-- 1 lukas staff 4361748 15 Apr 16:24 compact_monitor_2_1776259453552.mp4\n-rw-r--r-- 1 lukas staff 30743109 15 Apr 16:29 compact_monitor_2_1776259762038.mp4\n-rw-r--r-- 1 lukas staff 35230072 15 Apr 16:34 compact_monitor_2_1776260081207.mp4\n-rw-r--r-- 1 lukas staff 44719930 15 Apr 16:40 compact_monitor_2_1776260402183.mp4\n-rw-r--r-- 1 lukas staff 40699319 15 Apr 16:45 compact_monitor_2_1776260727063.mp4\n-rw-r--r-- 1 lukas staff 40175062 15 Apr 16:51 compact_monitor_2_1776261051104.mp4\n-rw-r--r-- 1 lukas staff 10100456 15 Apr 16:51 compact_monitor_2_1776261066254.mp4\n-rw-r--r-- 1 lukas staff 40218171 15 Apr 16:56 compact_monitor_2_1776261377240.mp4\n-rw-r--r-- 1 lukas staff 10164441 15 Apr 16:56 compact_monitor_2_1776261392293.mp4\n-rw-r--r-- 1 lukas staff 39679757 15 Apr 17:01 compact_monitor_2_1776261703501.mp4\n-rw-r--r-- 1 lukas staff 16362780 15 Apr 17:02 compact_monitor_2_1776261718068.mp4\n-rw-r--r-- 1 lukas staff 35673196 15 Apr 17:07 compact_monitor_2_1776262030308.mp4\n-rw-r--r-- 1 lukas staff 418425 15 Apr 17:07 compact_monitor_2_1776262044183.mp4\n-rw-r--r-- 1 lukas staff 38695493 15 Apr 17:12 compact_monitor_2_1776262350156.mp4\n-rw-r--r-- 1 lukas staff 41039121 15 Apr 17:18 compact_monitor_2_1776262671510.mp4\n-rw-r--r-- 1 lukas staff 14440675 15 Apr 17:18 compact_monitor_2_1776262686451.mp4\n-rw-r--r-- 1 lukas staff 29155784 15 Apr 17:23 compact_monitor_2_1776262997519.mp4\n-rw-r--r-- 1 lukas staff 38013561 15 Apr 17:28 compact_monitor_2_1776263315513.mp4\n-rw-r--r-- 1 lukas staff 13728546 15 Apr 17:28 compact_monitor_2_1776263330175.mp4\n-rw-r--r-- 1 lukas staff 42282890 15 Apr 17:34 compact_monitor_2_1776263643561.mp4\n-rw-r--r-- 1 lukas staff 15975636 15 Apr 17:34 compact_monitor_2_1776263659153.mp4\n-rw-r--r-- 1 lukas staff 42361074 15 Apr 17:39 compact_monitor_2_1776263971167.mp4\n-rw-r--r-- 1 lukas staff 12206045 15 Apr 17:39 compact_monitor_2_1776263987012.mp4\n-rw-r--r-- 1 lukas staff 46367818 15 Apr 17:45 compact_monitor_2_1776264298000.mp4\n-rw-r--r-- 1 lukas staff 8981811 15 Apr 17:45 compact_monitor_2_1776264315186.mp4\n-rw-r--r-- 1 lukas staff 39268566 15 Apr 17:50 compact_monitor_2_1776264625122.mp4\n-rw-r--r-- 1 lukas staff 14427002 15 Apr 17:50 compact_monitor_2_1776264640284.mp4\n-rw-r--r-- 1 lukas staff 39524622 15 Apr 17:56 compact_monitor_2_1776264952043.mp4\n-rw-r--r-- 1 lukas staff 12413344 15 Apr 17:56 compact_monitor_2_1776264966984.mp4\n-rw-r--r-- 1 lukas staff 37530622 15 Apr 18:01 compact_monitor_2_1776265280164.mp4\n-rw-r--r-- 1 lukas staff 16392257 15 Apr 18:01 compact_monitor_2_1776265294548.mp4\n-rw-r--r-- 1 lukas staff 43552334 15 Apr 18:07 compact_monitor_2_1776265608065.mp4\n-rw-r--r-- 1 lukas staff 6335856 15 Apr 18:07 compact_monitor_2_1776265624847.mp4\n-rw-r--r-- 1 lukas staff 40102732 15 Apr 18:12 compact_monitor_2_1776265936487.mp4\n-rw-r--r-- 1 lukas staff 10852075 15 Apr 18:12 compact_monitor_2_1776265950996.mp4\n-rw-r--r-- 1 lukas staff 33010772 15 Apr 18:17 compact_monitor_2_1776266266304.mp4\n-rw-r--r-- 1 lukas staff 12302090 15 Apr 18:18 compact_monitor_2_1776266279297.mp4\n-rw-r--r-- 1 lukas staff 37997133 15 Apr 18:23 compact_monitor_2_1776266594590.mp4\n-rw-r--r-- 1 lukas staff 13660744 15 Apr 18:23 compact_monitor_2_1776266608276.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-15 $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.109375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.11354167,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.21875,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.22291666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-14:~ (nc)","depth":2,"bounds":{"left":0.328125,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33229166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.44166666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ls","depth":2,"bounds":{"left":0.546875,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.55104166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.65625,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66041666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"bounds":{"left":0.7652778,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.76944447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.87430555,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8784722,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ls","depth":1,"bounds":{"left":0.49444443,"top":0.033333335,"width":0.011111111,"height":0.017777778},"role_description":"text"}]...
|
-1890632156939478115
|
-6312718904440456013
|
visual_change
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 208823 15 Apr 18:2 -rw-r--r-- 1 lukas staff 208823 15 Apr 18:24 1776266649991_m1.jpg
-rw-r--r-- 1 lukas staff 677743 15 Apr 18:24 1776266649991_m2.jpg
-rw-r--r-- 1 lukas staff 285273 15 Apr 18:24 1776266655380_m2.jpg
-rw-r--r-- 1 lukas staff 208338 15 Apr 18:24 1776266656348_m1.jpg
-rw-r--r-- 1 lukas staff 299758 15 Apr 18:24 1776266657887_m2.jpg
-rw-r--r-- 1 lukas staff 208905 15 Apr 18:24 1776266660014_m1.jpg
-rw-r--r-- 1 lukas staff 505543 15 Apr 18:24 1776266660357_m2.jpg
-rw-r--r-- 1 lukas staff 130773 15 Apr 18:24 1776266662583_m2.jpg
-rw-r--r-- 1 lukas staff 208837 15 Apr 18:24 1776266662590_m1.jpg
-rw-r--r-- 1 lukas staff 131262 15 Apr 18:24 1776266665030_m2.jpg
-rw-r--r-- 1 lukas staff 208543 15 Apr 18:24 1776266665178_m1.jpg
-rw-r--r-- 1 lukas staff 82600 15 Apr 18:24 1776266668094_m2.jpg
-rw-r--r-- 1 lukas staff 99799 15 Apr 18:24 1776266671070_m2.jpg
-rw-r--r-- 1 lukas staff 209265 15 Apr 18:24 1776266671742_m1.jpg
-rw-r--r-- 1 lukas staff 69569 15 Apr 18:24 1776266672855_m2.jpg
-rw-r--r-- 1 lukas staff 233878 15 Apr 18:24 1776266675463_m2.jpg
-rw-r--r-- 1 lukas staff 233944 15 Apr 18:24 1776266676686_m2.jpg
-rw-r--r-- 1 lukas staff 208529 15 Apr 18:24 1776266676718_m1.jpg
-rw-r--r-- 1 lukas staff 208411 15 Apr 18:24 1776266678430_m1.jpg
-rw-r--r-- 1 lukas staff 275989 15 Apr 18:24 1776266678431_m2.jpg
-rw-r--r-- 1 lukas staff 258903 15 Apr 18:24 1776266679106_m2.jpg
-rw-r--r-- 1 lukas staff 278951 15 Apr 18:24 1776266682164_m2.jpg
-rw-r--r-- 1 lukas staff 208465 15 Apr 18:24 1776266687272_m1.jpg
-rw-r--r-- 1 lukas staff 208398 15 Apr 18:24 1776266690323_m1.jpg
-rw-r--r-- 1 lukas staff 273693 15 Apr 18:24 1776266691227_m2.jpg
-rw-r--r-- 1 lukas staff 185943 15 Apr 18:24 1776266696382_m1.jpg
-rw-r--r-- 1 lukas staff 271869 15 Apr 18:24 1776266697274_m2.jpg
-rw-r--r-- 1 lukas staff 366699 15 Apr 18:25 1776266705465_m1.jpg
-rw-r--r-- 1 lukas staff 186079 15 Apr 18:25 1776266708505_m1.jpg
-rw-r--r-- 1 lukas staff 1292480 15 Apr 10:09 compact_monitor_1_1776236979346.mp4
-rw-r--r-- 1 lukas staff 6304039 15 Apr 10:14 compact_monitor_1_1776237284692.mp4
-rw-r--r-- 1 lukas staff 2514313 15 Apr 10:19 compact_monitor_1_1776237595554.mp4
-rw-r--r-- 1 lukas staff 2821904 15 Apr 10:25 compact_monitor_1_1776237899635.mp4
-rw-r--r-- 1 lukas staff 2785297 15 Apr 10:30 compact_monitor_1_1776238207393.mp4
-rw-r--r-- 1 lukas staff 1639472 15 Apr 10:35 compact_monitor_1_1776238512537.mp4
-rw-r--r-- 1 lukas staff 3207933 15 Apr 10:40 compact_monitor_1_1776238815528.mp4
-rw-r--r-- 1 lukas staff 3594658 15 Apr 10:45 compact_monitor_1_1776239122381.mp4
-rw-r--r-- 1 lukas staff 3671517 15 Apr 10:50 compact_monitor_1_1776239429225.mp4
-rw-r--r-- 1 lukas staff 4031948 15 Apr 10:55 compact_monitor_1_1776239734998.mp4
-rw-r--r-- 1 lukas staff 3529461 15 Apr 11:00 compact_monitor_1_1776240042925.mp4
-rw-r--r-- 1 lukas staff 5234845 15 Apr 11:05 compact_monitor_1_1776240349311.mp4
-rw-r--r-- 1 lukas staff 3323085 15 Apr 11:11 compact_monitor_1_1776240657823.mp4
-rw-r--r-- 1 lukas staff 2204215 15 Apr 11:16 compact_monitor_1_1776240963306.mp4
-rw-r--r-- 1 lukas staff 2387534 15 Apr 11:21 compact_monitor_1_1776241266776.mp4
-rw-r--r-- 1 lukas staff 4921676 15 Apr 11:26 compact_monitor_1_1776241570939.mp4
-rw-r--r-- 1 lukas staff 2135612 15 Apr 11:31 compact_monitor_1_1776241878162.mp4
-rw-r--r-- 1 lukas staff 494014 15 Apr 11:36 compact_monitor_1_1776242182944.mp4
-rw-r--r-- 1 lukas staff 1986658 15 Apr 11:41 compact_monitor_1_1776242488565.mp4
-rw-r--r-- 1 lukas staff 1651327 15 Apr 11:46 compact_monitor_1_1776242792386.mp4
-rw-r--r-- 1 lukas staff 190056 15 Apr 11:51 compact_monitor_1_1776243099454.mp4
-rw-r--r-- 1 lukas staff 489195 15 Apr 11:56 compact_monitor_1_1776243401560.mp4
-rw-r--r-- 1 lukas staff 637245 15 Apr 12:01 compact_monitor_1_1776243707339.mp4
-rw-r--r-- 1 lukas staff 836102 15 Apr 12:06 compact_monitor_1_1776244016111.mp4
-rw-r--r-- 1 lukas staff 2250311 15 Apr 12:12 compact_monitor_1_1776244325248.mp4
-rw-r--r-- 1 lukas staff 4438961 15 Apr 12:17 compact_monitor_1_1776244633485.mp4
-rw-r--r-- 1 lukas staff 2024811 15 Apr 12:22 compact_monitor_1_1776244939105.mp4
-rw-r--r-- 1 lukas staff 1140502 15 Apr 12:27 compact_monitor_1_1776245242576.mp4
-rw-r--r-- 1 lukas staff 818870 15 Apr 12:32 compact_monitor_1_1776245545145.mp4
-rw-r--r-- 1 lukas staff 506104 15 Apr 12:37 compact_monitor_1_1776245850845.mp4
-rw-r--r-- 1 lukas staff 506372 15 Apr 12:42 compact_monitor_1_1776246157330.mp4
-rw-r--r-- 1 lukas staff 585365 15 Apr 12:47 compact_monitor_1_1776246461621.mp4
-rw-r--r-- 1 lukas staff 1536187 15 Apr 12:52 compact_monitor_1_1776246766463.mp4
-rw-r--r-- 1 lukas staff 2825443 15 Apr 12:57 compact_monitor_1_1776247072489.mp4
-rw-r--r-- 1 lukas staff 3094796 15 Apr 13:03 compact_monitor_1_1776247379957.mp4
-rw-r--r-- 1 lukas staff 396633 15 Apr 13:08 compact_monitor_1_1776247688246.mp4
-rw-r--r-- 1 lukas staff 909684 15 Apr 13:13 compact_monitor_1_1776247993728.mp4
-rw-r--r-- 1 lukas staff 1577484 15 Apr 13:18 compact_monitor_1_1776248301121.mp4
-rw-r--r-- 1 lukas staff 1079237 15 Apr 13:23 compact_monitor_1_1776248607315.mp4
-rw-r--r-- 1 lukas staff 1091368 15 Apr 13:28 compact_monitor_1_1776248924298.mp4
-rw-r--r-- 1 lukas staff 925798 15 Apr 13:34 compact_monitor_1_1776249241863.mp4
-rw-r--r-- 1 lukas staff 1024193 15 Apr 13:39 compact_monitor_1_1776249553464.mp4
-rw-r--r-- 1 lukas staff 1965175 15 Apr 13:44 compact_monitor_1_1776249871482.mp4
-rw-r--r-- 1 lukas staff 942071 15 Apr 13:49 compact_monitor_1_1776250182641.mp4
-rw-r--r-- 1 lukas staff 1036861 15 Apr 13:55 compact_monitor_1_1776250503790.mp4
-rw-r--r-- 1 lukas staff 1084939 15 Apr 14:00 compact_monitor_1_1776250829184.mp4
-rw-r--r-- 1 lukas staff 1137305 15 Apr 14:05 compact_monitor_1_1776251148270.mp4
-rw-r--r-- 1 lukas staff 1084917 15 Apr 14:13 compact_monitor_1_1776251623899.mp4
-rw-r--r-- 1 lukas staff 472006 15 Apr 14:18 compact_monitor_1_1776251937854.mp4
-rw-r--r-- 1 lukas staff 2195675 15 Apr 14:24 compact_monitor_1_1776252241210.mp4
-rw-r--r-- 1 lukas staff 2126366 15 Apr 14:29 compact_monitor_1_1776252546881.mp4
-rw-r--r-- 1 lukas staff 1223098 15 Apr 14:34 compact_monitor_1_1776252863758.mp4
-rw-r--r-- 1 lukas staff 1554811 15 Apr 14:39 compact_monitor_1_1776253185709.mp4
-rw-r--r-- 1 lukas staff 283980 15 Apr 14:39 compact_monitor_1_1776253191237.mp4
-rw-r--r-- 1 lukas staff 1004738 15 Apr 14:45 compact_monitor_1_1776253502852.mp4
-rw-r--r-- 1 lukas staff 1007213 15 Apr 14:50 compact_monitor_1_1776253806491.mp4
-rw-r--r-- 1 lukas staff 1622820 15 Apr 14:55 compact_monitor_1_1776254109375.mp4
-rw-r--r-- 1 lukas staff 1800819 15 Apr 15:00 compact_monitor_1_1776254415281.mp4
-rw-r--r-- 1 lukas staff 1248853 15 Apr 15:05 compact_monitor_1_1776254720441.mp4
-rw-r--r-- 1 lukas staff 1358099 15 Apr 15:10 compact_monitor_1_1776255026922.mp4
-rw-r--r-- 1 lukas staff 1077547 15 Apr 15:15 compact_monitor_1_1776255334430.mp4
-rw-r--r-- 1 lukas staff 1194727 15 Apr 15:20 compact_monitor_1_1776255638369.mp4
-rw-r--r-- 1 lukas staff 1312132 15 Apr 15:25 compact_monitor_1_1776255944046.mp4
-rw-r--r-- 1 lukas staff 2526518 15 Apr 15:30 compact_monitor_1_1776256247989.mp4
-rw-r--r-- 1 lukas staff 2591568 15 Apr 15:35 compact_monitor_1_1776256553209.mp4
-rw-r--r-- 1 lukas staff 347132 15 Apr 15:41 compact_monitor_1_1776256862331.mp4
-rw-r--r-- 1 lukas staff 331422 15 Apr 15:46 compact_monitor_1_1776257183524.mp4
-rw-r--r-- 1 lukas staff 1507338 15 Apr 15:51 compact_monitor_1_1776257499295.mp4
-rw-r--r-- 1 lukas staff 1080123 15 Apr 15:57 compact_monitor_1_1776257818639.mp4
-rw-r--r-- 1 lukas staff 1048617 15 Apr 16:02 compact_monitor_1_1776258139836.mp4
-rw-r--r-- 1 lukas staff 1151460 15 Apr 16:07 compact_monitor_1_1776258462628.mp4
-rw-r--r-- 1 lukas staff 1206649 15 Apr 16:13 compact_monitor_1_1776258784114.mp4
-rw-r--r-- 1 lukas staff 1133984 15 Apr 16:18 compact_monitor_1_1776259107952.mp4
-rw-r--r-- 1 lukas staff 1142984 15 Apr 16:23 compact_monitor_1_1776259433131.mp4
-rw-r--r-- 1 lukas staff 1253153 15 Apr 16:29 compact_monitor_1_1776259757534.mp4
-rw-r--r-- 1 lukas staff 998310 15 Apr 16:34 compact_monitor_1_1776260076664.mp4
-rw-r--r-- 1 lukas staff 1065076 15 Apr 16:40 compact_monitor_1_1776260397335.mp4
-rw-r--r-- 1 lukas staff 1099220 15 Apr 16:45 compact_monitor_1_1776260721850.mp4
-rw-r--r-- 1 lukas staff 1154961 15 Apr 16:50 compact_monitor_1_1776261044836.mp4
-rw-r--r-- 1 lukas staff 1065431 15 Apr 16:56 compact_monitor_1_1776261372103.mp4
-rw-r--r-- 1 lukas staff 984542 15 Apr 17:01 compact_monitor_1_1776261696699.mp4
-rw-r--r-- 1 lukas staff 451220 15 Apr 17:01 compact_monitor_1_1776261702497.mp4
-rw-r--r-- 1 lukas staff 1211676 15 Apr 17:07 compact_monitor_1_1776262024768.mp4
-rw-r--r-- 1 lukas staff 1161330 15 Apr 17:12 compact_monitor_1_1776262344982.mp4
-rw-r--r-- 1 lukas staff 1052573 15 Apr 17:17 compact_monitor_1_1776262664755.mp4
-rw-r--r-- 1 lukas staff 418716 15 Apr 17:17 compact_monitor_1_1776262670708.mp4
-rw-r--r-- 1 lukas staff 1682982 15 Apr 17:23 compact_monitor_1_1776262992301.mp4
-rw-r--r-- 1 lukas staff 1073481 15 Apr 17:28 compact_monitor_1_1776263309511.mp4
-rw-r--r-- 1 lukas staff 1192672 15 Apr 17:34 compact_monitor_1_1776263636829.mp4
-rw-r--r-- 1 lukas staff 383279 15 Apr 17:34 compact_monitor_1_1776263642876.mp4
-rw-r--r-- 1 lukas staff 1357937 15 Apr 17:39 compact_monitor_1_1776263965549.mp4
-rw-r--r-- 1 lukas staff 1057912 15 Apr 17:44 compact_monitor_1_1776264293030.mp4
-rw-r--r-- 1 lukas staff 1055882 15 Apr 17:50 compact_monitor_1_1776264619470.mp4
-rw-r--r-- 1 lukas staff 1173057 15 Apr 17:55 compact_monitor_1_1776264946265.mp4
-rw-r--r-- 1 lukas staff 1162002 15 Apr 18:01 compact_monitor_1_1776265273041.mp4
-rw-r--r-- 1 lukas staff 410666 15 Apr 18:01 compact_monitor_1_1776265279242.mp4
-rw-r--r-- 1 lukas staff 1213530 15 Apr 18:06 compact_monitor_1_1776265602616.mp4
-rw-r--r-- 1 lukas staff 1210935 15 Apr 18:12 compact_monitor_1_1776265929948.mp4
-rw-r--r-- 1 lukas staff 355364 15 Apr 18:12 compact_monitor_1_1776265935884.mp4
-rw-r--r-- 1 lukas staff 985021 15 Apr 18:17 compact_monitor_1_1776266259356.mp4
-rw-r--r-- 1 lukas staff 448474 15 Apr 18:17 compact_monitor_1_1776266265353.mp4
-rw-r--r-- 1 lukas staff 1007624 15 Apr 18:23 compact_monitor_1_1776266587803.mp4
-rw-r--r-- 1 lukas staff 417702 15 Apr 18:23 compact_monitor_1_1776266593821.mp4
-rw-r--r-- 1 lukas staff 3815275 15 Apr 10:09 compact_monitor_2_1776236981488.mp4
-rw-r--r-- 1 lukas staff 3854792 15 Apr 10:14 compact_monitor_2_1776237291726.mp4
-rw-r--r-- 1 lukas staff 367131 15 Apr 10:19 compact_monitor_2_1776237598300.mp4
-rw-r--r-- 1 lukas staff 3965510 15 Apr 10:25 compact_monitor_2_1776237902921.mp4
-rw-r--r-- 1 lukas staff 468839 15 Apr 10:30 compact_monitor_2_1776238211071.mp4
-rw-r--r-- 1 lukas staff 395077 15 Apr 10:35 compact_monitor_2_1776238514343.mp4
-rw-r--r-- 1 lukas staff 1309545 15 Apr 10:40 compact_monitor_2_1776238819191.mp4
-rw-r--r-- 1 lukas staff 2579871 15 Apr 10:45 compact_monitor_2_1776239125548.mp4
-rw-r--r-- 1 lukas staff 2261244 15 Apr 10:50 compact_monitor_2_1776239432484.mp4
-rw-r--r-- 1 lukas staff 1614099 15 Apr 10:55 compact_monitor_2_1776239738314.mp4
-rw-r--r-- 1 lukas staff 1396501 15 Apr 11:00 compact_monitor_2_1776240046668.mp4
-rw-r--r-- 1 lukas staff 2608327 15 Apr 11:05 compact_monitor_2_1776240354465.mp4
-rw-r--r-- 1 lukas staff 1343284 15 Apr 11:11 compact_monitor_2_1776240661129.mp4
-rw-r--r-- 1 lukas staff 104083 15 Apr 11:16 compact_monitor_2_1776240965780.mp4
-rw-r--r-- 1 lukas staff 1696225 15 Apr 11:21 compact_monitor_2_1776241269257.mp4
-rw-r--r-- 1 lukas staff 3038037 15 Apr 11:26 compact_monitor_2_1776241574093.mp4
-rw-r--r-- 1 lukas staff 2308673 15 Apr 11:31 compact_monitor_2_1776241879955.mp4
-rw-r--r-- 1 lukas staff 3684492 15 Apr 11:36 compact_monitor_2_1776242185232.mp4
-rw-r--r-- 1 lukas staff 1318134 15 Apr 11:41 compact_monitor_2_1776242490310.mp4
-rw-r--r-- 1 lukas staff 2429835 15 Apr 11:46 compact_monitor_2_1776242794849.mp4
-rw-r--r-- 1 lukas staff 760204 15 Apr 11:51 compact_monitor_2_1776243100430.mp4
-rw-r--r-- 1 lukas staff 2563357 15 Apr 11:56 compact_monitor_2_1776243402772.mp4
-rw-r--r-- 1 lukas staff 2270439 15 Apr 12:01 compact_monitor_2_1776243709288.mp4
-rw-r--r-- 1 lukas staff 1591957 15 Apr 12:07 compact_monitor_2_1776244019480.mp4
-rw-r--r-- 1 lukas staff 1448741 15 Apr 12:12 compact_monitor_2_1776244328555.mp4
-rw-r--r-- 1 lukas staff 3297885 15 Apr 12:17 compact_monitor_2_1776244636345.mp4
-rw-r--r-- 1 lukas staff 1088455 15 Apr 12:22 compact_monitor_2_1776244941048.mp4
-rw-r--r-- 1 lukas staff 398901 15 Apr 12:27 compact_monitor_2_1776245243901.mp4
-rw-r--r-- 1 lukas staff 1511792 15 Apr 12:32 compact_monitor_2_1776245547006.mp4
-rw-r--r-- 1 lukas staff 1331771 15 Apr 12:37 compact_monitor_2_1776245852471.mp4
-rw-r--r-- 1 lukas staff 923996 15 Apr 12:42 compact_monitor_2_1776246158613.mp4
-rw-r--r-- 1 lukas staff 2568982 15 Apr 12:47 compact_monitor_2_1776246463035.mp4
-rw-r--r-- 1 lukas staff 3313949 15 Apr 12:52 compact_monitor_2_1776246768685.mp4
-rw-r--r-- 1 lukas staff 4771645 15 Apr 12:57 compact_monitor_2_1776247076079.mp4
-rw-r--r-- 1 lukas staff 6586185 15 Apr 13:03 compact_monitor_2_1776247382530.mp4
-rw-r--r-- 1 lukas staff 2358604 15 Apr 13:08 compact_monitor_2_1776247690007.mp4
-rw-r--r-- 1 lukas staff 2980294 15 Apr 13:13 compact_monitor_2_1776247996783.mp4
-rw-r--r-- 1 lukas staff 3036356 15 Apr 13:18 compact_monitor_2_1776248303327.mp4
-rw-r--r-- 1 lukas staff 13739308 15 Apr 13:23 compact_monitor_2_1776248612102.mp4
-rw-r--r-- 1 lukas staff 1792715 15 Apr 13:23 compact_monitor_2_1776248622198.mp4
-rw-r--r-- 1 lukas staff 19438020 15 Apr 13:28 compact_monitor_2_1776248929123.mp4
-rw-r--r-- 1 lukas staff 1542891 15 Apr 13:29 compact_monitor_2_1776248939710.mp4
-rw-r--r-- 1 lukas staff 18764167 15 Apr 13:34 compact_monitor_2_1776249244616.mp4
-rw-r--r-- 1 lukas staff 29428799 15 Apr 13:39 compact_monitor_2_1776249557895.mp4
-rw-r--r-- 1 lukas staff 12512925 15 Apr 13:44 compact_monitor_2_1776249875231.mp4
-rw-r--r-- 1 lukas staff 30936872 15 Apr 13:50 compact_monitor_2_1776250186990.mp4
-rw-r--r-- 1 lukas staff 2793009 15 Apr 13:50 compact_monitor_2_1776250201560.mp4
-rw-r--r-- 1 lukas staff 33052595 15 Apr 13:55 compact_monitor_2_1776250510466.mp4
-rw-r--r-- 1 lukas staff 8811443 15 Apr 13:55 compact_monitor_2_1776250525325.mp4
-rw-r--r-- 1 lukas staff 36732130 15 Apr 14:00 compact_monitor_2_1776250833909.mp4
-rw-r--r-- 1 lukas staff 808116 15 Apr 14:00 compact_monitor_2_1776250847678.mp4
-rw-r--r-- 1 lukas staff 35963507 15 Apr 14:06 compact_monitor_2_1776251153283.mp4
-rw-r--r-- 1 lukas staff 17255576 15 Apr 14:13 compact_monitor_2_1776251627877.mp4
-rw-r--r-- 1 lukas staff 217409 15 Apr 14:18 compact_monitor_2_1776251938719.mp4
-rw-r--r-- 1 lukas staff 2179896 15 Apr 14:24 compact_monitor_2_1776252243501.mp4
-rw-r--r-- 1 lukas staff 24202787 15 Apr 14:29 compact_monitor_2_1776252550645.mp4
-rw-r--r-- 1 lukas staff 40541441 15 Apr 14:34 compact_monitor_2_1776252869026.mp4
-rw-r--r-- 1 lukas staff 1969819 15 Apr 14:34 compact_monitor_2_1776252884388.mp4
-rw-r--r-- 1 lukas staff 26185693 15 Apr 14:40 compact_monitor_2_1776253191567.mp4
-rw-r--r-- 1 lukas staff 2958445 15 Apr 14:45 compact_monitor_2_1776253504333.mp4
-rw-r--r-- 1 lukas staff 1721625 15 Apr 14:50 compact_monitor_2_1776253807794.mp4
-rw-r--r-- 1 lukas staff 5168799 15 Apr 14:55 compact_monitor_2_1776254111721.mp4
-rw-r--r-- 1 lukas staff 1008125 15 Apr 15:00 compact_monitor_2_1776254418941.mp4
-rw-r--r-- 1 lukas staff 2805751 15 Apr 15:05 compact_monitor_2_1776254723846.mp4
-rw-r--r-- 1 lukas staff 4263256 15 Apr 15:10 compact_monitor_2_1776255030878.mp4
-rw-r--r-- 1 lukas staff 1855151 15 Apr 15:15 compact_monitor_2_1776255336562.mp4
-rw-r--r-- 1 lukas staff 1068172 15 Apr 15:20 compact_monitor_2_1776255640728.mp4
-rw-r--r-- 1 lukas staff 393423 15 Apr 15:25 compact_monitor_2_1776255946991.mp4
-rw-r--r-- 1 lukas staff 1066924 15 Apr 15:30 compact_monitor_2_1776256250851.mp4
-rw-r--r-- 1 lukas staff 4522183 15 Apr 15:36 compact_monitor_2_1776256557162.mp4
-rw-r--r-- 1 lukas staff 21285442 15 Apr 15:41 compact_monitor_2_1776256868069.mp4
-rw-r--r-- 1 lukas staff 4799464 15 Apr 15:41 compact_monitor_2_1776256880438.mp4
-rw-r--r-- 1 lukas staff 25082442 15 Apr 15:46 compact_monitor_2_1776257187591.mp4
-rw-r--r-- 1 lukas staff 29377114 15 Apr 15:51 compact_monitor_2_1776257503657.mp4
-rw-r--r-- 1 lukas staff 2577148 15 Apr 15:51 compact_monitor_2_1776257516759.mp4
-rw-r--r-- 1 lukas staff 35197312 15 Apr 15:57 compact_monitor_2_1776257823244.mp4
-rw-r--r-- 1 lukas staff 739380 15 Apr 15:57 compact_monitor_2_1776257838858.mp4
-rw-r--r-- 1 lukas staff 39595503 15 Apr 16:02 compact_monitor_2_1776258144789.mp4
-rw-r--r-- 1 lukas staff 2671413 15 Apr 16:02 compact_monitor_2_1776258160717.mp4
-rw-r--r-- 1 lukas staff 33576004 15 Apr 16:08 compact_monitor_2_1776258467332.mp4
-rw-r--r-- 1 lukas staff 3404945 15 Apr 16:08 compact_monitor_2_1776258481869.mp4
-rw-r--r-- 1 lukas staff 36386887 15 Apr 16:13 compact_monitor_2_1776258789278.mp4
-rw-r--r-- 1 lukas staff 2717076 15 Apr 16:13 compact_monitor_2_1776258804257.mp4
-rw-r--r-- 1 lukas staff 38542946 15 Apr 16:18 compact_monitor_2_1776259112717.mp4
-rw-r--r-- 1 lukas staff 6480087 15 Apr 16:18 compact_monitor_2_1776259128284.mp4
-rw-r--r-- 1 lukas staff 39076466 15 Apr 16:24 compact_monitor_2_1776259438063.mp4
-rw-r--r-- 1 lukas staff 4361748 15 Apr 16:24 compact_monitor_2_1776259453552.mp4
-rw-r--r-- 1 lukas staff 30743109 15 Apr 16:29 compact_monitor_2_1776259762038.mp4
-rw-r--r-- 1 lukas staff 35230072 15 Apr 16:34 compact_monitor_2_1776260081207.mp4
-rw-r--r-- 1 lukas staff 44719930 15 Apr 16:40 compact_monitor_2_1776260402183.mp4
-rw-r--r-- 1 lukas staff 40699319 15 Apr 16:45 compact_monitor_2_1776260727063.mp4
-rw-r--r-- 1 lukas staff 40175062 15 Apr 16:51 compact_monitor_2_1776261051104.mp4
-rw-r--r-- 1 lukas staff 10100456 15 Apr 16:51 compact_monitor_2_1776261066254.mp4
-rw-r--r-- 1 lukas staff 40218171 15 Apr 16:56 compact_monitor_2_1776261377240.mp4
-rw-r--r-- 1 lukas staff 10164441 15 Apr 16:56 compact_monitor_2_1776261392293.mp4
-rw-r--r-- 1 lukas staff 39679757 15 Apr 17:01 compact_monitor_2_1776261703501.mp4
-rw-r--r-- 1 lukas staff 16362780 15 Apr 17:02 compact_monitor_2_1776261718068.mp4
-rw-r--r-- 1 lukas staff 35673196 15 Apr 17:07 compact_monitor_2_1776262030308.mp4
-rw-r--r-- 1 lukas staff 418425 15 Apr 17:07 compact_monitor_2_1776262044183.mp4
-rw-r--r-- 1 lukas staff 38695493 15 Apr 17:12 compact_monitor_2_1776262350156.mp4
-rw-r--r-- 1 lukas staff 41039121 15 Apr 17:18 compact_monitor_2_1776262671510.mp4
-rw-r--r-- 1 lukas staff 14440675 15 Apr 17:18 compact_monitor_2_1776262686451.mp4
-rw-r--r-- 1 lukas staff 29155784 15 Apr 17:23 compact_monitor_2_1776262997519.mp4
-rw-r--r-- 1 lukas staff 38013561 15 Apr 17:28 compact_monitor_2_1776263315513.mp4
-rw-r--r-- 1 lukas staff 13728546 15 Apr 17:28 compact_monitor_2_1776263330175.mp4
-rw-r--r-- 1 lukas staff 42282890 15 Apr 17:34 compact_monitor_2_1776263643561.mp4
-rw-r--r-- 1 lukas staff 15975636 15 Apr 17:34 compact_monitor_2_1776263659153.mp4
-rw-r--r-- 1 lukas staff 42361074 15 Apr 17:39 compact_monitor_2_1776263971167.mp4
-rw-r--r-- 1 lukas staff 12206045 15 Apr 17:39 compact_monitor_2_1776263987012.mp4
-rw-r--r-- 1 lukas staff 46367818 15 Apr 17:45 compact_monitor_2_1776264298000.mp4
-rw-r--r-- 1 lukas staff 8981811 15 Apr 17:45 compact_monitor_2_1776264315186.mp4
-rw-r--r-- 1 lukas staff 39268566 15 Apr 17:50 compact_monitor_2_1776264625122.mp4
-rw-r--r-- 1 lukas staff 14427002 15 Apr 17:50 compact_monitor_2_1776264640284.mp4
-rw-r--r-- 1 lukas staff 39524622 15 Apr 17:56 compact_monitor_2_1776264952043.mp4
-rw-r--r-- 1 lukas staff 12413344 15 Apr 17:56 compact_monitor_2_1776264966984.mp4
-rw-r--r-- 1 lukas staff 37530622 15 Apr 18:01 compact_monitor_2_1776265280164.mp4
-rw-r--r-- 1 lukas staff 16392257 15 Apr 18:01 compact_monitor_2_1776265294548.mp4
-rw-r--r-- 1 lukas staff 43552334 15 Apr 18:07 compact_monitor_2_1776265608065.mp4
-rw-r--r-- 1 lukas staff 6335856 15 Apr 18:07 compact_monitor_2_1776265624847.mp4
-rw-r--r-- 1 lukas staff 40102732 15 Apr 18:12 compact_monitor_2_1776265936487.mp4
-rw-r--r-- 1 lukas staff 10852075 15 Apr 18:12 compact_monitor_2_1776265950996.mp4
-rw-r--r-- 1 lukas staff 33010772 15 Apr 18:17 compact_monitor_2_1776266266304.mp4
-rw-r--r-- 1 lukas staff 12302090 15 Apr 18:18 compact_monitor_2_1776266279297.mp4
-rw-r--r-- 1 lukas staff 37997133 15 Apr 18:23 compact_monitor_2_1776266594590.mp4
-rw-r--r-- 1 lukas staff 13660744 15 Apr 18:23 compact_monitor_2_1776266608276.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-15 $ ll
total 4476272
drwxr-xr-x 740 lukas staff 23680 15 Apr 18:38 .
drwxr-xr-x 9 lukas staff 288 15 Apr 09:58 ..
-rw-r--r-- 1 lukas staff 669036 15 Apr 18:13 1776265985239_m2.jpg
-rw-r--r-- 1 lukas staff 203719 15 Apr 18:13 1776265985279_m1.jpg
-rw-r--r-- 1 lukas staff 203612 15 Apr 18:13 1776265987070_m1.jpg
-rw-r--r-- 1 lukas staff 674275 15 Apr 18:13 1776265987771_m2.jpg
-rw-r--r-- 1 lukas staff 203511 15 Apr 18:13 1776265989538_m1.jpg
-rw-r--r-- 1 lukas staff 667384 15 Apr 18:13 1776265989967_m2.jpg
-rw-r--r-- 1 lukas staff 203666 15 Apr 18:13 1776265991616_m1.jpg
-rw-r--r-- 1 lukas staff 669140 15 Apr 18:13 1776265992196_m2.jpg
-rw-r--r-- 1 lukas staff 203595 15 Apr 18:13 1776265993913_m1.jpg
-rw-r--r-- 1 lukas staff 680910 15 Apr 18:13 1776265994505_m2.jpg
-rw-r--r-- 1 lukas staff 203581 15 Apr 18:13 1776265996130_m1.jpg
-rw-r--r-- 1 lukas staff 670428 15 Apr 18:13 1776265996652_m2.jpg
-rw-r--r-- 1 lukas staff 203708 15 Apr 18:13 1776265998298_m1.jpg
-rw-r--r-- 1 lukas staff 659876 15 Apr 18:13 1776265998619_m2.jpg
-rw-r--r-- 1 lukas staff 203790 15 Apr 18:13 1776266000317_m1.jpg
-rw-r--r-- 1 lukas staff 675595 15 Apr 18:13 1776266000927_m2.jpg
-rw-r--r-- 1 lukas staff 203772 15 Apr 18:13 1776266002837_m1.jpg
-rw-r--r-- 1 lukas staff 681185 15 Apr 18:13 1776266003295_m2.jpg
-rw-r--r-- 1 lukas staff 203737 15 Apr 18:13 1776266004906_m1.jpg
-rw-r--r-- 1 lukas staff 674774 15 Apr 18:13 1776266005279_m2.jpg
-rw-r--r-- 1 lukas staff 203710 15 Apr 18:13 1776266007045_m1.jpg
-rw-r--r-- 1 lukas staff 672301 15 Apr 18:13 1776266007562_m2.jpg
-rw-r--r-- 1 lukas staff 203778 15 Apr 18:13 1776266009409_m1.jpg
-rw-r--r-- 1 lukas staff 647795 15 Apr 18:13 1776266009873_m2.jpg
-rw-r--r-- 1 lukas staff 203773 15 Apr 18:13 1776266011796_m1.jpg
-rw-r--r-- 1 lukas staff 621588 15 Apr 18:13 1776266012145_m2.jpg
-rw-r--r-- 1 lukas staff 203797 15 Apr 18:13 1776266013610_m1.jpg
-rw-r--r-- 1 lukas staff 557210 15 Apr 18:13 1776266013959_m2.jpg
-rw-r--r-- 1 lukas staff 203799 15 Apr 18:13 1776266015437_m1.jpg
-rw-r--r-- 1 lukas staff 576074 15 Apr 18:13 1776266015791_m2.jpg
-rw-r--r-- 1 lukas staff 203846 15 Apr 18:13 1776266017399_m1.jpg
-rw-r--r-- 1 lukas staff 592254 15 Apr 18:13 1776266017945_m2.jpg
-rw-r--r-- 1 lukas staff 203767 15 Apr 18:13 1776266019677_m1.jpg
-rw-r--r-- 1 lukas staff 554944 15 Apr 18:13 1776266020127_m2.jpg
-rw-r--r-- 1 lukas staff 203706 15 Apr 18:13 1776266022131_m1.jpg
-rw-r--r-- 1 lukas staff 584193 15 Apr 18:13 1776266022505_m2.jpg
-rw-r--r-- 1 lukas staff 203718 15 Apr 18:13 1776266024358_m1.jpg
-rw-r--r-- 1 lukas staff 586235 15 Apr 18:13 1776266024952_m2.jpg
-rw-r--r-- 1 lukas staff 203609 15 Apr 18:13 1776266026730_m1.jpg
-rw-r--r-- 1 lukas staff 582376 15 Apr 18:13 1776266027279_m2.jpg
-rw-r--r-- 1 lukas staff 203696 15 Apr 18:13 1776266028710_m1.jpg
-rw-r--r-- 1 lukas staff 568913 15 Apr 18:13 1776266029111_m2.jpg
-rw-r--r-- 1 lukas staff 203648 15 Apr 18:13 1776266030751_m1.jpg
-rw-r--r-- 1 lukas staff 431509 15 Apr 18:13 1776266031143_m2.jpg
-rw-r--r-- 1 lukas staff 468169 15 Apr 18:13 1776266033149_m2.jpg
-rw-r--r-- 1 lukas staff 203714 15 Apr 18:13 1776266033552_m1.jpg
-rw-r--r-- 1 lukas staff 203753 15 Apr 18:13 1776266035546_m1.jpg
-rw-r--r-- 1 lukas staff 477414 15 Apr 18:13 1776266036047_m2.jpg
-rw-r--r-- 1 lukas staff 203704 15 Apr 18:13 1776266037947_m1.jpg
-rw-r--r-- 1 lukas staff 476980 15 Apr 18:13 1776266038370_m2.jpg
-rw-r--r-- 1 lukas staff 203686 15 Apr 18:14 1776266040183_m1.jpg
-rw-r--r-- 1 lukas staff 485156 15 Apr 18:14 1776266040577_m2.jpg
-rw-r--r-- 1 lukas staff 486141 15 Apr 18:14 1776266042413_m2.jpg
-rw-r--r-- 1 lukas staff 490784 15 Apr 18:14 1776266043473_m2.jpg
-rw-r--r-- 1 lukas staff 556817 15 Apr 18:14 1776266044640_m2.jpg
-rw-r--r-- 1 lukas staff 588963 15 Apr 18:14 1776266045757_m2.jpg
-rw-r--r-- 1 lukas staff 591407 15 Apr 18:14 1776266046926_m2.jpg
-rw-r--r-- 1 lukas staff 204286 15 Apr 18:14 1776266048022_m1.jpg
-rw-r--r-- 1 lukas staff 592997 15 Apr 18:14 1776266048341_m2.jpg
-rw-r--r-- 1 lukas staff 204367 15 Apr 18:14 1776266050092_m1.jpg
-rw-r--r-- 1 lukas staff 595109 15 Apr 18:14 1776266050576_m2.jpg
-rw-r--r-- 1 lukas staff 203877 15 Apr 18:14 1776266052271_m1.jpg
-rw-r--r-- 1 lukas staff 617722 15 Apr 18:14 1776266052711_m2.jpg
-rw-r--r-- 1 lukas staff 566247 15 Apr 18:14 1776266054920_m2.jpg
-rw-r--r-- 1 lukas staff 587163 15 Apr 18:14 1776266056075_m2.jpg
-rw-r--r-- 1 lukas staff 203881 15 Apr 18:14 1776266056756_m1.jpg
-rw-r--r-- 1 lukas staff 590009 15 Apr 18:14 1776266057195_m2.jpg
-rw-r--r-- 1 lukas staff 559463 15 Apr 18:14 1776266059115_m2.jpg
-rw-r--r-- 1 lukas staff 203874 15 Apr 18:14 1776266060554_m1.jpg
-rw-r--r-- 1 lukas staff 596850 15 Apr 18:14 1776266060554_m2.jpg
-rw-r--r-- 1 lukas staff 203900 15 Apr 18:14 1776266062752_m1.jpg
-rw-r--r-- 1 lukas staff 441354 15 Apr 18:14 1776266066711_m2.jpg
-rw-r--r-- 1 lukas staff 55745 15 Apr 18:14 1776266068595_m1.jpg
-rw-r--r-- 1 lukas staff 446599 15 Apr 18:14 1776266069433_m2.jpg
-rw-r--r-- 1 lukas staff 446609 15 Apr 18:14 1776266070172_m2.jpg
-rw-r--r-- 1 lukas staff 94532 15 Apr 18:14 1776266070176_m1.jpg
-rw-r--r-- 1 lukas staff 88474 15 Apr 18:14 1776266071656_m1.jpg
-rw-r--r-- 1 lukas staff 535766 15 Apr 18:14 1776266072584_m2.jpg
-rw-r--r-- 1 lukas staff 92870 15 Apr 18:14 1776266074845_m1.jpg
-rw-r--r-- 1 lukas staff 88052 15 Apr 18:14 1776266077692_m1.jpg
-rw-r--r-- 1 lukas staff 88179 15 Apr 18:14 1776266082536_m1.jpg
-rw-r--r-- 1 lukas staff 533426 15 Apr 18:14 1776266082536_m2.jpg
-rw-r--r-- 1 lukas staff 88175 15 Apr 18:14 1776266084440_m1.jpg
-rw-r--r-- 1 lukas staff 500743 15 Apr 18:14 1776266084440_m2.jpg
-rw-r--r-- 1 lukas staff 502910 15 Apr 18:14 1776266085860_m2.jpg
-rw-r--r-- 1 lukas staff 88161 15 Apr 18:14 1776266087714_m1.jpg
-rw-r--r-- 1 lukas staff 562872 15 Apr 18:14 1776266087714_m2.jpg
-rw-r--r-- 1 lukas staff 507401 15 Apr 18:14 1776266091668_m2.jpg
-rw-r--r-- 1 lukas staff 88198 15 Apr 18:14 1776266091678_m1.jpg
-rw-r--r-- 1 lukas staff 556350 15 Apr 18:14 1776266096275_m2.jpg
-rw-r--r-- 1 lukas staff 574870 15 Apr 18:14 1776266099219_m2.jpg
-rw-r--r-- 1 lukas staff 88436 15 Apr 18:15 1776266104959_m1.jpg
-rw-r--r-- 1 lukas staff 254145 15 Apr 18:15 1776266105237_m2.jpg
-rw-r--r-- 1 lukas staff 88535 15 Apr 18:15 1776266106590_m1.jpg
-rw-r--r-- 1 lukas staff 276093 15 Apr 18:15 1776266106590_m2.jpg
-rw-r--r-- 1 lukas staff 95178 15 Apr 18:15 1776266107364_m1.jpg
-rw-r--r-- 1 lukas staff 272726 15 Apr 18:15 1776266107397_m2.jpg
-rw-r--r-- 1 lukas staff 272729 15 Apr 18:15 1776266108410_m2.jpg
-rw-r--r-- 1 lukas staff 95201 15 Apr 18:15 1776266108439_m1.jpg
-rw-r--r-- 1 lukas staff 207648 15 Apr 18:15 1776266110874_m1.jpg
-rw-r--r-- 1 lukas staff 272706 15 Apr 18:15 1776266111078_m2.jpg
-rw-r--r-- 1 lukas staff 208459 15 Apr 18:15 1776266111821_m1.jpg
-rw-r--r-- 1 lukas staff 212011 15 Apr 18:15 1776266113939_m1.jpg
-rw-r--r-- 1 lukas staff 272780 15 Apr 18:15 1776266122951_m2.jpg
-rw-r--r-- 1 lukas staff 211547 15 Apr 18:15 1776266122974_m1.jpg
-rw-r--r-- 1 lukas staff 209162 15 Apr 18:15 1776266123875_m1.jpg
-rw-r--r-- 1 lukas staff 205277 15 Apr 18:15 1776266125853_m1.jpg
-rw-r--r-- 1 lukas staff 272667 15 Apr 18:15 1776266125853_m2.jpg
-rw-r--r-- 1 lukas staff 272719 15 Apr 18:15 1776266127403_m2.jpg
-rw-r--r-- 1 lukas staff 206802 15 Apr 18:15 1776266127410_m1.jpg
-rw-r--r-- 1 lukas staff 213918 15 Apr 18:15 1776266130082_m1.jpg
-rw-r--r-- 1 lukas staff 212411 15 Apr 18:15 1776266132673_m1.jpg
-rw-r--r-- 1 lukas staff 272808 15 Apr 18:15 1776266132673_m2.jpg
-rw-r--r-- 1 lukas staff 207894 15 Apr 18:15 1776266133340_m1.jpg
-rw-r--r-- 1 lukas staff 555932 15 Apr 18:15 1776266134609_m2.jpg
-rw-r--r-- 1 lukas staff 207911 15 Apr 18:15 1776266135525_m1.jpg
-rw-r--r-- 1 lukas staff 548908 15 Apr 18:15 1776266137606_m2.jpg
-rw-r--r-- 1 lukas staff 207856 15 Apr 18:15 1776266138682_m1.jpg
-rw-r--r-- 1 lukas staff 560222 15 Apr 18:15 1776266140759_m2.jpg
-rw-r--r-- 1 lukas staff 560157 15 Apr 18:15 1776266143743_m2.jpg
-rw-r--r-- 1 lukas staff 207838 15 Apr 18:15 1776266144684_m1.jpg
-rw-r--r-- 1 lukas staff 537855 15 Apr 18:15 1776266145496_m2.jpg
-rw-r--r-- 1 lukas staff 587185 15 Apr 18:15 1776266147770_m2.jpg
-rw-r--r-- 1 lukas staff 209722 15 Apr 18:15 1776266150490_m1.jpg
-rw-r--r-- 1 lukas staff 216901 15 Apr 18:15 1776266150747_m2.jpg
-rw-r--r-- 1 lukas staff 208191 15 Apr 18:15 1776266153538_m1.jpg
-rw-r--r-- 1 lukas staff 258901 15 Apr 18:15 1776266153787_m2.jpg
-rw-r--r-- 1 lukas staff 276340 15 Apr 18:15 1776266156823_m2.jpg
-rw-r--r-- 1 lukas staff 208298 15 Apr 18:15 1776266158610_m1.jpg
-rw-r--r-- 1 lukas staff 590491 15 Apr 18:15 1776266158610_m2.jpg
-rw-r--r-- 1 lukas staff 208192 15 Apr 18:16 1776266160959_m1.jpg
-rw-r--r-- 1 lukas staff 545849 15 Apr 18:16 1776266161252_m2.jpg
-rw-r--r-- 1 lukas staff 208154 15 Apr 18:16 1776266163104_m1.jpg
-rw-r--r-- 1 lukas staff 519973 15 Apr 18:16 1776266164298_m2.jpg
-rw-r--r-- 1 lukas staff 208231 15 Apr 18:16 1776266165561_m1.jpg
-rw-r--r-- 1 lukas staff 593300 15 Apr 18:16 1776266166851_m2.jpg
-rw-r--r-- 1 lukas staff 574561 15 Apr 18:16 1776266168075_m2.jpg
-rw-r--r-- 1 lukas staff 208190 15 Apr 18:16 1776266168319_m1.jpg
-rw-r--r-- 1 lukas staff 208164 15 Apr 18:16 1776266170354_m1.jpg
-rw-r--r-- 1 lukas staff 558860 15 Apr 18:16 1776266170659_m2.jpg
-rw-r--r-- 1 lukas staff 517959 15 Apr 18:16 1776266175820_m2.jpg
-rw-r--r-- 1 lukas staff 208615 15 Apr 18:16 1776266177600_m1.jpg
-rw-r--r-- 1 lukas staff 562544 15 Apr 18:16 1776266177627_m2.jpg
-rw-r--r-- 1 lukas staff 208601 15 Apr 18:16 1776266180047_m1.jpg
-rw-r--r-- 1 lukas staff 582678 15 Apr 18:16 1776266180212_m2.jpg
-rw-r--r-- 1 lukas staff 208628 15 Apr 18:16 1776266181996_m1.jpg
-rw-r--r-- 1 lukas staff 208571 15 Apr 18:16 1776266185646_m1.jpg
-rw-r--r-- 1 lukas staff 594509 15 Apr 18:16 1776266185646_m2.jpg
-rw-r--r-- 1 lukas staff 208622 15 Apr 18:16 1776266187916_m1.jpg
-rw-r--r-- 1 lukas staff 608592 15 Apr 18:16 1776266188157_m2.jpg
-rw-r--r-- 1 lukas staff 599957 15 Apr 18:16 1776266190500_m2.jpg
-rw-r--r-- 1 lukas staff 208624 15 Apr 18:16 1776266190949_m1.jpg
-rw-r--r-- 1 lukas staff 208694 15 Apr 18:16 1776266193217_m1.jpg
-rw-r--r-- 1 lukas staff 615862 15 Apr 18:16 1776266193357_m2.jpg
-rw-r--r-- 1 lukas staff 208254 15 Apr 18:16 1776266195513_m1.jpg
-rw-r--r-- 1 lukas staff 624275 15 Apr 18:16 1776266195549_m2.jpg
-rw-r--r-- 1 lukas staff 645335 15 Apr 18:16 1776266197725_m2.jpg
-rw-r--r-- 1 lukas staff 208241 15 Apr 18:16 1776266198956_m1.jpg
-rw-r--r-- 1 lukas staff 646868 15 Apr 18:16 1776266199007_m2.jpg
-rw-r--r-- 1 lukas staff 208643 15 Apr 18:16 1776266202174_m1.jpg
-rw-r--r-- 1 lukas staff 652412 15 Apr 18:16 1776266202213_m2.jpg
-rw-r--r-- 1 lukas staff 208612 15 Apr 18:16 1776266206551_m1.jpg
-rw-r--r-- 1 lukas staff 656571 15 Apr 18:16 1776266206551_m2.jpg
-rw-r--r-- 1 lukas staff 208638 15 Apr 18:16 1776266209266_m1.jpg
-rw-r--r-- 1 lukas staff 658369 15 Apr 18:16 1776266209280_m2.jpg
-rw-r--r-- 1 lukas staff 208715 15 Apr 18:16 1776266212218_m1.jpg
-rw-r--r-- 1 lukas staff 659247 15 Apr 18:16 1776266212218_m2.jpg
-rw-r--r-- 1 lukas staff 208689 15 Apr 18:16 1776266215752_m1.jpg
-rw-r--r-- 1 lukas staff 653016 15 Apr 18:16 1776266215771_m2.jpg
-rw-r--r-- 1 lukas staff 586023 15 Apr 18:17 1776266219752_m2.jpg
-rw-r--r-- 1 lukas staff 208588 15 Apr 18:17 1776266220701_m1.jpg
-rw-r--r-- 1 lukas staff 633574 15 Apr 18:17 1776266221274_m2.jpg
-rw-r--r-- 1 lukas staff 636933 15 Apr 18:17 1776266227340_m2.jpg
-rw-r--r-- 1 lukas staff 639420 15 Apr 18:17 1776266232300_m2.jpg
-rw-r--r-- 1 lukas staff 208544 15 Apr 18:17 1776266232337_m1.jpg
-rw-r--r-- 1 lukas staff 643943 15 Apr 18:17 1776266236469_m2.jpg
-rw-r--r-- 1 lukas staff 208610 15 Apr 18:17 1776266236483_m1.jpg
-rw-r--r-- 1 lukas staff 208598 15 Apr 18:17 1776266238593_m1.jpg
-rw-r--r-- 1 lukas staff 630398 15 Apr 18:17 1776266238602_m2.jpg
-rw-r--r-- 1 lukas staff 624451 15 Apr 18:17 1776266240803_m2.jpg
-rw-r--r-- 1 lukas staff 208484 15 Apr 18:17 1776266242547_m1.jpg
-rw-r--r-- 1 lukas staff 630386 15 Apr 18:17 1776266242547_m2.jpg
-rw-r--r-- 1 lukas staff 208525 15 Apr 18:17 1776266244786_m1.jpg
-rw-r--r-- 1 lukas staff 633291 15 Apr 18:17 1776266245111_m2.jpg
-rw-r--r-- 1 lukas staff 545820 15 Apr 18:17 1776266247239_m2.jpg
-rw-r--r-- 1 lukas staff 547468 15 Apr 18:17 1776266248374_m2.jpg
-rw-r--r-- 1 lukas staff 208653 15 Apr 18:17 1776266248977_m1.jpg
-rw-r--r-- 1 lukas staff 533852 15 Apr 18:17 1776266249644_m2.jpg
-rw-r--r-- 1 lukas staff 560142 15 Apr 18:17 1776266251631_m2.jpg
-rw-r--r-- 1 lukas staff 208278 15 Apr 18:17 1776266254529_m1.jpg
-rw-r--r-- 1 lukas staff 671156 15 Apr 18:17 1776266254554_m2.jpg
-rw-r--r-- 1 lukas staff 671725 15 Apr 18:17 1776266257375_m2.jpg
-rw-r--r-- 1 lukas staff 208252 15 Apr 18:17 1776266257388_m1.jpg
-rw-r--r-- 1 lukas staff 208266 15 Apr 18:17 1776266260730_m1.jpg
-rw-r--r-- 1 lukas staff 668299 15 Apr 18:17 1776266261140_m2.jpg
-rw-r--r-- 1 lukas staff 208309 15 Apr 18:17 1776266262574_m1.jpg
-rw-r--r-- 1 lukas staff 662509 15 Apr 18:17 1776266262882_m2.jpg
-rw-r--r-- 1 lukas staff 208131 15 Apr 18:17 1776266264475_m1.jpg
-rw-r--r-- 1 lukas staff 662810 15 Apr 18:17 1776266264869_m2.jpg
-rw-r--r-- 1 lukas staff 208191 15 Apr 18:17 1776266266343_m1.jpg
-rw-r--r-- 1 lukas staff 668093 15 Apr 18:17 1776266266919_m2.jpg
-rw-r--r-- 1 lukas staff 208163 15 Apr 18:17 1776266268978_m1.jpg
-rw-r--r-- 1 lukas staff 666086 15 Apr 18:17 1776266269305_m2.jpg
-rw-r--r-- 1 lukas staff 208277 15 Apr 18:17 1776266271029_m1.jpg
-rw-r--r-- 1 lukas staff 659339 15 Apr 18:17 1776266271383_m2.jpg
-rw-r--r-- 1 lukas staff 208198 15 Apr 18:17 1776266273464_m1.jpg
-rw-r--r-- 1 lukas staff 662828 15 Apr 18:17 1776266273971_m2.jpg
-rw-r--r-- 1 lukas staff 208062 15 Apr 18:17 1776266275425_m1.jpg
-rw-r--r-- 1 lukas staff 661898 15 Apr 18:17 1776266275684_m2.jpg
-rw-r--r-- 1 lukas staff 208033 15 Apr 18:17 1776266277232_m1.jpg
-rw-r--r-- 1 lukas staff 658221 15 Apr 18:17 1776266277517_m2.jpg
-rw-r--r-- 1 lukas staff 208114 15 Apr 18:17 1776266279573_m1.jpg
-rw-r--r-- 1 lukas staff 602127 15 Apr 18:18 1776266280047_m2.jpg
-rw-r--r-- 1 lukas staff 208037 15 Apr 18:18 1776266281724_m1.jpg
-rw-r--r-- 1 lukas staff 596966 15 Apr 18:18 1776266282107_m2.jpg
-rw-r--r-- 1 lukas staff 208120 15 Apr 18:18 1776266283882_m1.jpg
-rw-r--r-- 1 lukas staff 605123 15 Apr 18:18 1776266284188_m2.jpg
-rw-r--r-- 1 lukas staff 208244 15 Apr 18:18 1776266285945_m1.jpg
-rw-r--r-- 1 lukas staff 619753 15 Apr 18:18 1776266286471_m2.jpg
-rw-r--r-- 1 lukas staff 208208 15 Apr 18:18 1776266288028_m1.jpg
-rw-r--r-- 1 lukas staff 642228 15 Apr 18:18 1776266288334_m2.jpg
-rw-r--r-- 1 lukas staff 208132 15 Apr 18:18 1776266289850_m1.jpg
-rw-r--r-- 1 lukas staff 596740 15 Apr 18:18 1776266290179_m2.jpg
-rw-r--r-- 1 lukas staff 208063 15 Apr 18:18 1776266291759_m1.jpg
-rw-r--r-- 1 lukas staff 519390 15 Apr 18:18 1776266292102_m2.jpg
-rw-r--r-- 1 lukas staff 208064 15 Apr 18:18 1776266293780_m1.jpg
-rw-r--r-- 1 lukas staff 570229 15 Apr 18:18 1776266294157_m2.jpg
-rw-r--r-- 1 lukas staff 208572 15 Apr 18:18 1776266296164_m1.jpg
-rw-r--r-- 1 lukas staff 627388 15 Apr 18:18 1776266296515_m2.jpg
-rw-r--r-- 1 lukas staff 208569 15 Apr 18:18 1776266298335_m1.jpg
-rw-r--r-- 1 lukas staff 634945 15 Apr 18:18 1776266298705_m2.jpg
-rw-r--r-- 1 lukas staff 208639 15 Apr 18:18 1776266300354_m1.jpg
-rw-r--r-- 1 lukas staff 657628 15 Apr 18:18 1776266300766_m2.jpg
-rw-r--r-- 1 lukas staff 657244 15 Apr 18:18 1776266302789_m2.jpg
-rw-r--r-- 1 lukas staff 208494 15 Apr 18:18 1776266303032_m1.jpg
-rw-r--r-- 1 lukas staff 644942 15 Apr 18:18 1776266305193_m2.jpg
-rw-r--r-- 1 lukas staff 208528 15 Apr 18:18 1776266305226_m1.jpg
-rw-r--r-- 1 lukas staff 659418 15 Apr 18:18 1776266307482_m2.jpg
-rw-r--r-- 1 lukas staff 208235 15 Apr 18:18 1776266307995_m1.jpg
-rw-r--r-- 1 lukas staff 653477 15 Apr 18:18 1776266310362_m2.jpg
-rw-r--r-- 1 lukas staff 650556 15 Apr 18:18 1776266311519_m2.jpg
-rw-r--r-- 1 lukas staff 208178 15 Apr 18:18 1776266311576_m1.jpg
-rw-r--r-- 1 lukas staff 639707 15 Apr 18:18 1776266314332_m2.jpg
-rw-r--r-- 1 lukas staff 208212 15 Apr 18:18 1776266314402_m1.jpg
-rw-r--r-- 1 lukas staff 627225 15 Apr 18:18 1776266316656_m2.jpg
-rw-r--r-- 1 lukas staff 640482 15 Apr 18:18 1776266317791_m2.jpg
-rw-r--r-- 1 lukas staff 208927 15 Apr 18:18 1776266317875_m1.jpg
-rw-r--r-- 1 lukas staff 655721 15 Apr 18:18 1776266320034_m2.jpg
-rw-r--r-- 1 lukas staff 653914 15 Apr 18:18 1776266321149_m2.jpg
-rw-r--r-- 1 lukas staff 208973 15 Apr 18:18 1776266322248_m1.jpg
-rw-r--r-- 1 lukas staff 651290 15 Apr 18:18 1776266322405_m2.jpg
-rw-r--r-- 1 lukas staff 208883 15 Apr 18:18 1776266324678_m1.jpg
-rw-r--r-- 1 lukas staff 649799 15 Apr 18:18 1776266324696_m2.jpg
-rw-r--r-- 1 lukas staff 208944 15 Apr 18:18 1776266327023_m1.jpg
-rw-r--r-- 1 lukas staff 640016 15 Apr 18:18 1776266327481_m2.jpg
-rw-r--r-- 1 lukas staff 648723 15 Apr 18:18 1776266329400_m2.jpg
-rw-r--r-- 1 lukas staff 649676 15 Apr 18:18 1776266330593_m2.jpg
-rw-r--r-- 1 lukas staff 208128 15 Apr 18:18 1776266331799_m1.jpg
-rw-r--r-- 1 lukas staff 657268 15 Apr 18:18 1776266331870_m2.jpg
-rw-r--r-- 1 lukas staff 614701 15 Apr 18:18 1776266334838_m2.jpg
-rw-r--r-- 1 lukas staff 208599 15 Apr 18:18 1776266334866_m1.jpg
-rw-r--r-- 1 lukas staff 208720 15 Apr 18:18 1776266337075_m1.jpg
-rw-r--r-- 1 lukas staff 635012 15 Apr 18:18 1776266337384_m2.jpg
-rw-r--r-- 1 lukas staff 208649 15 Apr 18:18 1776266339499_m1.jpg
-rw-r--r-- 1 lukas staff 654410 15 Apr 18:19 1776266340051_m2.jpg
-rw-r--r-- 1 lukas staff 670162 15 Apr 18:19 1776266342278_m2.jpg
-rw-r--r-- 1 lukas staff 208679 15 Apr 18:19 1776266343422_m1.jpg
-rw-r--r-- 1 lukas staff 679486 15 Apr 18:19 1776266343480_m2.jpg
-rw-r--r-- 1 lukas staff 580457 15 Apr 18:19 1776266346149_m2.jpg
-rw-r--r-- 1 lukas staff 613073 15 Apr 18:19 1776266349191_m2.jpg
-rw-r--r-- 1 lukas staff 208605 15 Apr 18:19 1776266349504_m1.jpg
-rw-r--r-- 1 lukas staff 208530 15 Apr 18:19 1776266351872_m1.jpg
-rw-r--r-- 1 lukas staff 618382 15 Apr 18:19 1776266352314_m2.jpg
-rw-r--r-- 1 lukas staff 208156 15 Apr 18:19 1776266354320_m1.jpg
-rw-r--r-- 1 lukas staff 637916 15 Apr 18:19 1776266354736_m2.jpg
-rw-r--r-- 1 lukas staff 208104 15 Apr 18:19 1776266356503_m1.jpg
-rw-r--r-- 1 lukas staff 635941 15 Apr 18:19 1776266356846_m2.jpg
-rw-r--r-- 1 lukas staff 208119 15 Apr 18:19 1776266358528_m1.jpg
-rw-r--r-- 1 lukas staff 618746 15 Apr 18:19 1776266358951_m2.jpg
-rw-r--r-- 1 lukas staff 741230 15 Apr 18:19 1776266360933_m2.jpg
-rw-r--r-- 1 lukas staff 684325 15 Apr 18:19 1776266362281_m2.jpg
-rw-r--r-- 1 lukas staff 208646 15 Apr 18:19 1776266362913_m1.jpg
-rw-r--r-- 1 lukas staff 700483 15 Apr 18:19 1776266365163_m2.jpg
-rw-r--r-- 1 lukas staff 208877 15 Apr 18:19 1776266366139_m1.jpg
-rw-r--r-- 1 lukas staff 601181 15 Apr 18:19 1776266366639_m2.jpg
-rw-r--r-- 1 lukas staff 208909 15 Apr 18:19 1776266369139_m1.jpg
-rw-r--r-- 1 lukas staff 655095 15 Apr 18:19 1776266369139_m2.jpg
-rw-r--r-- 1 lukas staff 656950 15 Apr 18:19 1776266371906_m2.jpg
-rw-r--r-- 1 lukas staff 208873 15 Apr 18:19 1776266371909_m1.jpg
-rw-r--r-- 1 lukas staff 596595 15 Apr 18:19 1776266374350_m2.jpg
-rw-r--r-- 1 lukas staff 678600 15 Apr 18:19 1776266375785_m2.jpg
-rw-r--r-- 1 lukas staff 208146 15 Apr 18:19 1776266377145_m1.jpg
-rw-r--r-- 1 lukas staff 688844 15 Apr 18:19 1776266377145_m2.jpg
-rw-r--r-- 1 lukas staff 208870 15 Apr 18:19 1776266384365_m1.jpg
-rw-r--r-- 1 lukas staff 684366 15 Apr 18:19 1776266384403_m2.jpg
-rw-r--r-- 1 lukas staff 208252 15 Apr 18:19 1776266386353_m1.jpg
-rw-r--r-- 1 lukas staff 662242 15 Apr 18:19 1776266386874_m2.jpg
-rw-r--r-- 1 lukas staff 208227 15 Apr 18:19 1776266388905_m1.jpg
-rw-r--r-- 1 lukas staff 669929 15 Apr 18:19 1776266389162_m2.jpg
-rw-r--r-- 1 lukas staff 564108 15 Apr 18:19 1776266394415_m2.jpg
-rw-r--r-- 1 lukas staff 208254 15 Apr 18:19 1776266394669_m1.jpg
-rw-r--r-- 1 lukas staff 597473 15 Apr 18:19 1776266397429_m2.jpg
-rw-r--r-- 1 lukas staff 208197 15 Apr 18:19 1776266398122_m1.jpg
-rw-r--r-- 1 lukas staff 588253 15 Apr 18:19 1776266398654_m2.jpg
-rw-r--r-- 1 lukas staff 208263 15 Apr 18:20 1776266400169_m1.jpg
-rw-r--r-- 1 lukas staff 590676 15 Apr 18:20 1776266400800_m2.jpg
-rw-r--r-- 1 lukas staff 660135 15 Apr 18:20 1776266403120_m2.jpg
-rw-r--r-- 1 lukas staff 208198 15 Apr 18:20 1776266404315_m1.jpg
-rw-r--r-- 1 lukas staff 663732 15 Apr 18:20 1776266404344_m2.jpg
-rw-r--r-- 1 lukas staff 676367 15 Apr 18:20 1776266410701_m2.jpg
-rw-r--r-- 1 lukas staff 208239 15 Apr 18:20 1776266410716_m1.jpg
-rw-r--r-- 1 lukas staff 208866 15 Apr 18:20 1776266423385_m1.jpg
-rw-r--r-- 1 lukas staff 690762 15 Apr 18:20 1776266423399_m2.jpg
-rw-r--r-- 1 lukas staff 672619 15 Apr 18:20 1776266426942_m2.jpg
-rw-r--r-- 1 lukas staff 208889 15 Apr 18:20 1776266426971_m1.jpg
-rw-r--r-- 1 lukas staff 208218 15 Apr 18:20 1776266430808_m1.jpg
-rw-r--r-- 1 lukas staff 671881 15 Apr 18:20 1776266430808_m2.jpg
-rw-r--r-- 1 lukas staff 208183 15 Apr 18:20 1776266433623_m1.jpg
-rw-r--r-- 1 lukas staff 674761 15 Apr 18:20 1776266433670_m2.jpg
-rw-r--r-- 1 lukas staff 208217 15 Apr 18:20 1776266436240_m1.jpg
-rw-r--r-- 1 lukas staff 670159 15 Apr 18:20 1776266436263_m2.jpg
-rw-r--r-- 1 lukas staff 208182 15 Apr 18:20 1776266438629_m1.jpg
-rw-r--r-- 1 lukas staff 668057 15 Apr 18:20 1776266438638_m2.jpg
-rw-r--r-- 1 lukas staff 208906 15 Apr 18:20 1776266442252_m1.jpg
-rw-r--r-- 1 lukas staff 672509 15 Apr 18:20 1776266442293_m2.jpg
-rw-r--r-- 1 lukas staff 208955 15 Apr 18:20 1776266444286_m1.jpg
-rw-r--r-- 1 lukas staff 669667 15 Apr 18:20 1776266444713_m2.jpg
-rw-r--r-- 1 lukas staff 711375 15 Apr 18:20 1776266446659_m2.jpg
-rw-r--r-- 1 lukas staff 208164 15 Apr 18:20 1776266447514_m1.jpg
-rw-r--r-- 1 lukas staff 739201 15 Apr 18:20 1776266448562_m2.jpg
-rw-r--r-- 1 lukas staff 208600 15 Apr 18:20 1776266450066_m1.jpg
-rw-r--r-- 1 lukas staff 735015 15 Apr 18:20 1776266450077_m2.jpg
-rw-r--r-- 1 lukas staff 602085 15 Apr 18:20 1776266452815_m2.jpg
-rw-r--r-- 1 lukas staff 554910 15 Apr 18:20 1776266455812_m2.jpg
-rw-r--r-- 1 lukas staff 208706 15 Apr 18:20 1776266457074_m1.jpg
-rw-r--r-- 1 lukas staff 668265 15 Apr 18:20 1776266457218_m2.jpg
-rw-r--r-- 1 lukas staff 627127 15 Apr 18:21 1776266462398_m2.jpg
-rw-r--r-- 1 lukas staff 651254 15 Apr 18:21 1776266464654_m2.jpg
-rw-r--r-- 1 lukas staff 208782 15 Apr 18:21 1776266464655_m1.jpg
-rw-r--r-- 1 lukas staff 208337 15 Apr 18:21 1776266467161_m1.jpg
-rw-r--r-- 1 lukas staff 675477 15 Apr 18:21 1776266467769_m2.jpg
-rw-r--r-- 1 lukas staff 208352 15 Apr 18:21 1776266470056_m1.jpg
-rw-r--r-- 1 lukas staff 646287 15 Apr 18:21 1776266470426_m2.jpg
-rw-r--r-- 1 lukas staff 208441 15 Apr 18:21 1776266472480_m1.jpg
-rw-r--r-- 1 lukas staff 670331 15 Apr 18:21 1776266473095_m2.jpg
-rw-r--r-- 1 lukas staff 208409 15 Apr 18:21 1776266474797_m1.jpg
-rw-r--r-- 1 lukas staff 658783 15 Apr 18:21 1776266475129_m2.jpg
-rw-r--r-- 1 lukas staff 208807 15 Apr 18:21 1776266476839_m1.jpg
-rw-r--r-- 1 lukas staff 658240 15 Apr 18:21 1776266477168_m2.jpg
-rw-r--r-- 1 lukas staff 208844 15 Apr 18:21 1776266478922_m1.jpg
-rw-r--r-- 1 lukas staff 666996 15 Apr 18:21 1776266479271_m2.jpg
-rw-r--r-- 1 lukas staff 699189 15 Apr 18:21 1776266481646_m2.jpg
-rw-r--r-- 1 lukas staff 708975 15 Apr 18:21 1776266482907_m2.jpg
-rw-r--r-- 1 lukas staff 682317 15 Apr 18:21 1776266487203_m2.jpg
-rw-r--r-- 1 lukas staff 209118 15 Apr 18:21 1776266489247_m1.jpg
-rw-r--r-- 1 lukas staff 687083 15 Apr 18:21 1776266489247_m2.jpg
-rw-r--r-- 1 lukas staff 209082 15 Apr 18:21 1776266491199_m1.jpg
-rw-r--r-- 1 lukas staff 676433 15 Apr 18:21 1776266492289_m2.jpg
-rw-r--r-- 1 lukas staff 209174 15 Apr 18:21 1776266493476_m1.jpg
-rw-r--r-- 1 lukas staff 668920 15 Apr 18:21 1776266493678_m2.jpg
-rw-r--r-- 1 lukas staff 208388 15 Apr 18:21 1776266497984_m1.jpg
-rw-r--r-- 1 lukas staff 652067 15 Apr 18:21 1776266497984_m2.jpg
-rw-r--r-- 1 lukas staff 208298 15 Apr 18:21 1776266501940_m1.jpg
-rw-r--r-- 1 lukas staff 632049 15 Apr 18:21 1776266501960_m2.jpg
-rw-r--r-- 1 lukas staff 208349 15 Apr 18:21 1776266503799_m1.jpg
-rw-r--r-- 1 lukas staff 643154 15 Apr 18:21 1776266504159_m2.jpg
-rw-r--r-- 1 lukas staff 634868 15 Apr 18:21 1776266507710_m2.jpg
-rw-r--r-- 1 lukas staff 208376 15 Apr 18:21 1776266507750_m1.jpg
-rw-r--r-- 1 lukas staff 208249 15 Apr 18:21 1776266509896_m1.jpg
-rw-r--r-- 1 lukas staff 659743 15 Apr 18:21 1776266510358_m2.jpg
-rw-r--r-- 1 lukas staff 675221 15 Apr 18:21 1776266512596_m2.jpg
-rw-r--r-- 1 lukas staff 699120 15 Apr 18:21 1776266513811_m2.jpg
-rw-r--r-- 1 lukas staff 208799 15 Apr 18:21 1776266513915_m1.jpg
-rw-r--r-- 1 lukas staff 661306 15 Apr 18:21 1776266517106_m2.jpg
-rw-r--r-- 1 lukas staff 208768 15 Apr 18:21 1776266519085_m1.jpg
-rw-r--r-- 1 lukas staff 654783 15 Apr 18:21 1776266519085_m2.jpg
-rw-r--r-- 1 lukas staff 657014 15 Apr 18:22 1776266521775_m2.jpg
-rw-r--r-- 1 lukas staff 208743 15 Apr 18:22 1776266521905_m1.jpg
-rw-r--r-- 1 lukas...
|
NULL
|
|
24400
|
531
|
0
|
2026-04-15T12:20:49.685049+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-15/1776 /Users/lukas/.screenpipe/data/data/2026-04-15/1776255649685_m2.jpg...
|
iTerm2
|
ls
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-- Text content
text_content TEXT,
text_le -- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
)
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL)
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT frame_id, app_name, window_name, browser_url, focused,
substr(text, 1, 100) as text_preview
FROM ocr_text
ORDER BY frame_id DESC
LIMIT 5;
"
Error: in prepare, no such column: browser_url
SELECT frame_id, app_name, window_name, browser_url, focused, substr(
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/ | head -20
data
pending-transcriptions
screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-159-14:~ (nc)
Close Tab
-zsh
Close Tab
ls
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
Close Tab
-zsh
Close Tab
⌥⌘1
ls...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n)\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL)\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT frame_id, app_name, window_name, browser_url, focused, \n substr(text, 1, 100) as text_preview\nFROM ocr_text\nORDER BY frame_id DESC\nLIMIT 5;\n\"\nError: in prepare, no such column: browser_url\n SELECT frame_id, app_name, window_name, browser_url, focused, substr(\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/ | head -20\n\ndata\npending-transcriptions\nscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"bounds":{"left":0.23320313,"top":0.5048611,"width":0.5566406,"height":0.49513888},"value":"-- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n)\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL)\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT frame_id, app_name, window_name, browser_url, focused, \n substr(text, 1, 100) as text_preview\nFROM ocr_text\nORDER BY frame_id DESC\nLIMIT 5;\n\"\nError: in prepare, no such column: browser_url\n SELECT frame_id, app_name, window_name, browser_url, focused, substr(\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/ | head -20\n\ndata\npending-transcriptions\nscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.29472655,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.29707032,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.35625,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.35859376,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-14:~ (nc)","depth":2,"bounds":{"left":0.41777343,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4201172,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.47929686,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.48164064,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ls","depth":2,"bounds":{"left":0.5408203,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5431641,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.60234374,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6046875,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"bounds":{"left":0.66367185,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6660156,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.725,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.72734374,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7703125,"top":1.0,"width":0.021875,"height":-0.02013886},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ls","depth":1,"bounds":{"left":0.5113281,"top":1.0,"width":0.00625,"height":-0.020833373},"role_description":"text"}]...
|
7007425700448230148
|
-3677001203578777967
|
visual_change
|
accessibility
|
NULL
|
-- Text content
text_content TEXT,
text_le -- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
)
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL)
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT frame_id, app_name, window_name, browser_url, focused,
substr(text, 1, 100) as text_preview
FROM ocr_text
ORDER BY frame_id DESC
LIMIT 5;
"
Error: in prepare, no such column: browser_url
SELECT frame_id, app_name, window_name, browser_url, focused, substr(
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/ | head -20
data
pending-transcriptions
screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-159-14:~ (nc)
Close Tab
-zsh
Close Tab
ls
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
Close Tab
-zsh
Close Tab
⌥⌘1
ls...
|
NULL
|
|
54533
|
1177
|
12
|
2026-04-20T09:03:09.213417+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776675789213_m1.jpg...
|
iTerm2
|
login
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
login
Close Tab
⌥⌘1
login...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"shell","depth":4,"bounds":{"left":0.0,"top":0.08777778,"width":1.0,"height":0.9122222},"is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.16458334,"top":0.05888889,"width":0.16458334,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.32916668,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33333334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49340278,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49756944,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.6576389,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66180557,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"login","depth":2,"bounds":{"left":0.821875,"top":0.05888889,"width":0.16423611,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.82604164,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"login","depth":1,"bounds":{"left":0.4888889,"top":0.033333335,"width":0.025,"height":0.017777778},"role_description":"text"}]...
|
-2200734963300834753
|
-5869707530278949535
|
click
|
hybrid
|
NULL
|
shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
screenpipe"
Close Tab
login
Close Tab
⌥⌘1
login
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% (47 8 Mon 20 Apr 12:03:08screenpipe"DOCKER2026-04-20111:57:24.78897222026-04-20T11:57:36.481689Z2026-04-20T11:57:37.756625Z2026-04-20T11:57:37.83439022026-04-20T11:57:49.238635Z2026-04-20T11:57:52.246590Z2026-04-20T11:57:55.24183222026-04-20T11:57:58.301374Z2026-04-20T11:58:01.337222Z2026-04-20T11:58:26.816413Z2026-04-20111:58:29.85645222026-04-20T11:58:30.666522Z2026-04-20T11:58:30.701317Z2026-04-20T11:58:35.98922522026-04-20T11:58:38.498940Z2026-04-20111:58:40.79499322026-04-20T11:58:42.377239Z2026-04-20T11:58:59.532131Z2026-04-20T11:59:39.744543Z2026-04-20T11:59:58.627407Z2026-04-20112:01:34.8824792ROM\nframes \nWHERE\n418542s2026-04-20T12:01:34.882676Z2026-04-20T12:01:37.375070Z2026-04-20T12:01:45.894068Z2026-04-20T12:01:50.133673Z2026-04-20T12:01:50.211171Z2026-04-20T12:01:55.273763Z2026-04-20T12:02:00.095574Z2026-04-20112:02:15.11427722026-04-20T12:02:15.166674Z2026-04-20T12:02:16.372669Z2026-04-20T12:02:16.45249622026-04-20T12:02:17.931496Z2026-04-20T12:02:17.993032Z2026-04-20T12:02:20.527678Z2026-04-20T12:02:20.583726Z2026-04-20T12:02:24.944153Z2026-04-20T12:02:26.245682Z2026-04-20112:02:27.227059Z2026-04-20T12:02:27.321541Z2026-04-20T12:02:59.757184Z2026-04-20T12:02:59.854055ZDEV (docker)APP (-zsh)*3-zsh₴4screenpipe"*5INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2Chash=-3030885276270352434,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2(hash=-3030885276270352434,INFOscreenpipe_engine::event_driven_capture: contentdedup:skippingcapture for monitor 1screenpipe_engine::event_dedup:skipping capture for monitor 2Chash=-3030885276270352434,trigger=click)trigger=click)INFOdriven_capture:content(hash=-3030885276270352434,trigger=click)INFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2Chash=-3030885276270352434,INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=-3030885276270352434,trigger=visual_change)trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:contentdedup:skippingcapture for monitor 2 (hash=-3030885276270352434,trigger=visual_change)INFOINFOscreenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2(hash=-3030885276270352434,trigger=visual_change)screenpipe_engine::event_driven_capture:contentdedup:skipping capture for monitor 2(hash=-3030885276270352434,INFOscreenpipe_engine::event_driven_capture: content dedup:skippingcapture for monitor 2skipping capture for monitor 2Chash=-3030885276270352434,trigger=visual_change)trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup:(hash=-3030885276270352434,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup:skippingcapture for monitor 2(hash=-3030885276270352434,INFOscreenpipe_engine::event_driven_capture:contentdedup: skippingcapture for monitor 1screenpipe_engine::event_driven_capture:dedup:capture for monitor 2Chash=-3030885276270352434,trigger=click)trigger=click)INFOcontentskippingChash=-3030885276270352434,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:content dedup:skippingcapture for monitor 1(hash=-3030885276270352434,INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2INFO(hash=-3030885276270352434,trigger=click)trigger=click)screenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2(hash=-3030885276270352434,trigger=visual_change)INFOscreenpipe_engine:: event_driven_capture: contentdedup:skipping capture for monitor 2(hash=-6813386454352183033, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-6813386454352183033, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture:content dedup: skippingcapture for monitor 2 (hash=3151396900374529455, trigger=visual_change)WARNsqlx::query:summary="SELECT id, snapshot_path,device_name,db.statement="\n\nSELECT\nid, Insnapshot_path, \ndevice_name, intimestamp \nFsnapshot_path IS NOT NULL\nAND timestamp < ?1\nORDER BYln device_name, \ntimestamp ASC\nLIMIT\n5000\n" rows_affected=0 rows_returned=87 elapsed=1.259INFOscreenpipe_engine::snapshot_compaction:snapshot compaction: found 87eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 35 frames, 10.6MB → 2.3MB (4.6x), 35 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 50 frames,8.1MB→ 4.1MB (2.0x),50 JPEGSdeletedINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3134476686614698911, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3134476686614698911,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=467660169672458461, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=467660169672458461, trigger=click)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 2 (hash=467660169672458461, trigger=click)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 2 (hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2(hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=467660169672458461,trigger=click)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=-218291911025499455,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 1 (hash=-218291911025499455,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-218291911025499455, trigger=click)INFOscreenpipe_engine::event_driven_capture:content dedup:skipping capture for monitor 2 (hash=-218291911025499455,trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 2 (hash=-8912532918897684009, trigger=click)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=-8912532918897684009, trigger=click)...
|
54531
|
|
42691
|
911
|
44
|
2026-04-17T07:32:22.368969+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776411142368_m2.jpg...
|
iTerm2
|
login
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
shell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (- shell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Review screenpipe usage and Boosteroid integration (claude)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"shell","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.5566406,"height":-0.05486107},"is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.07910156,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.31230468,"top":1.0,"width":0.07910156,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.31464845,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39140624,"top":1.0,"width":0.07910156,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.39375,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4705078,"top":1.0,"width":0.07910156,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.47285157,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.54960936,"top":1.0,"width":0.07890625,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.55195314,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (claude)","depth":2,"bounds":{"left":0.6285156,"top":1.0,"width":0.07890625,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2856984300930880539
|
1045002288911599521
|
click
|
hybrid
|
NULL
|
shell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (- shell
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Review screenpipe usage and Boosteroid integration (claude)
FirefoxFileEditiViewHistoryBookmarks)ProfilesPlatform Sprint 2 Q2 - Platform Te[SRD-6793] Les Mills activity type:• Problem loading pageSymfony|Component\Debug\ExcerCloudWatch | us-east-2Z Configure SSH access to multiple@ Console Home | Console Home | elNew Tab+ New TabToolsWindow Helpaws• searchO EC2© Elastic Container ServiceCloudWatch > Logs InsightsG 53© CodeDeployCo CloudWatch• Query definition InfoQuery scopeLou crous lidllleLog groupsSelect up to 50 log groupsrroperty selectorworkerClear all470346795945AWNE Show more chosen log groups (+25)fields @timestamp, @message, @logStream, @logtilter @message like /3364459/filter @message not like /Analytic/ | filter @message not like /Send/mlutercmessage not like/wedhook/Tilter cmessage not like /Meetingbot/•Limit 10000ElastiCache[Option+S] ©Ko:) Aurora and RDSI8 Amazon OpenSearch Ser...• CloudFrontd MediaLive5m30m© -[@@ meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com• Meetwkas kovalkLoas ins ants orY*L Query generator@ FieldsRun queryCancel• Completed. Query executed for 26 log groups. ®Schedule queryLogs (428)Patterns (5)VisualizationLogs (428)[ Saved and sample queriesHistoryBackend Chanter . now100%4• Fri 17 Apr 10:32:21'fields*20*40timestamp*2c*20*40message*2c*20*40logStream*2c*20*40log*0a*7c*:Account ID: 4103-4619-5943®United States (Ohio)12hCustom (1w) FLompare lUtt)UTC timezone12 Start tailindFacets | Lookun [EMAIL] ChapterNikolay Nikolov is in this callUse Gemini to take notesShare notes and transcriptStartJoin nowOther ways to joinHide histogram§ soundcore A..4) System Defa...20304/1004/1004/10|04/1104/1104/1104/1104/12Q Filter table results (case insensitive)...eclmestant• 1 2026-04-16T20:29:05.288Z• < <0Lb-04-10110:49:21.9544• 3 <026-04-16116:29:21.9344• 4 2026-04-16T16:29:21.932Z• 5 2026-04-16T12:26:44.094Z• 6 2026-04-16T12:26:44.093Z• 7 2026-04-16T12:26:44.092Z• 8 2026-04-16T12:26:40.009Z• 9 2026-04-16T12:26:40.009Z• 16 <026-04-16112:26:40.00/L• 11 2026-04-16T11:44:13.330ZCloudShellreedbackemessace10.30.172.163 - - [16/Apr/2026:20:29:05 +0000] 200 "GET10.30.38.8 - - Г16/Abr/2026:16:29:21 +00007 404 "GET /ar- - 16/Anr/2026:16:29:21 +0000 "GFT /index.nhn?annTd=384NOTICE: PHP message: [2026-04-16 16:29:21] production. INFO: [GetAcc... php-app/php-app/f2dc7efdb4714f748a69327ebb9d90dc L?- - 16/Apr/2026:12:26:44 +0000 "GET /index.php?appId=38484&portalId... php-app/php-app/0d1f6209b8154f86b81acc932e95deb9 L210.30.172.163 - - [16/Apr/2026:12:26:44 +0000] 404 "GET /api/v1/get... php-app/php-app/Od1f6209b8154f86b81acc932e95deb9 LNOTICE: PHP message: [2026-04-16 12:26:44] production. INFO: [GetAc... php-app/php-app/0d1f6209b8154f86b81acc932e95deb9 L210.30.98.28 - - [16/Apr/2026:12:26:40 +0000] 404 "GET /api/v1/get-a...php-app/php-app/9b5675687af240f5a35db483a751c030 L- - 16/Apr/2026:12:26:39 +0000 "GET /index.php?appId=38484&portalId..php-app/php-app/9b5675687af240f5a35db483a751c030 LNOTICE: PHP message: [2026-04-16 12:26:40] production. INFO: [GetAcc... php-app/php-app/9b5675687af240f5a35db483a751c030 L210.30.38.8 - - [16/Apr/2026:11:44:13 +0000] 404 "GET /api/v1/get-ac... php-app/php-app/1ae5d5d18ddO4e699bb44ea076fa41e9 LD FaceTime HD...[gf Backgrounds….Gemini is available in Meet as your personal in-meeting assistant. It can analyze conversation via temporaryaccess to meeting captions. Using Ask Gemini won't create a recording or store meeting data. The meetinghost can turn it off. Learn more410346195943:php-app410346195943 :php-app410540195943:010-000470340795943:010-001410346195943:php-app410346195943:php-app410346195943:php-app410346195943:nhn-ann04/17© 2026, Amazon Web Services, Inc. or its affiliates.PrivacyTermscookie preterences...
|
42689
|
|
40121
|
829
|
2
|
2026-04-16T15:23:40.708094+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776353020708_m2.jpg...
|
iTerm2
|
login
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
login
Close Tab
⌥⌘1
login...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu Apr 16 15:48:37 on ttys010","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.5566406,"height":-0.05486107},"value":"Last login: Thu Apr 16 15:48:37 on ttys010","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.32539064,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.32773438,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.41757813,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.41992188,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5097656,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5121094,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.60195315,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.60429686,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"login","depth":2,"bounds":{"left":0.6941406,"top":1.0,"width":0.0921875,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6964844,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7703125,"top":1.0,"width":0.021875,"height":-0.02013886},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"login","depth":1,"bounds":{"left":0.50742185,"top":1.0,"width":0.0140625,"height":-0.020833373},"role_description":"text"}]...
|
3533656538608910916
|
-8175761707498879487
|
click
|
accessibility
|
NULL
|
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
login
Close Tab
⌥⌘1
login...
|
NULL
|
|
40120
|
828
|
2
|
2026-04-16T15:23:40.658425+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776353020658_m1.jpg...
|
iTerm2
|
login
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
login
Close Tab
⌥⌘1
login...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu Apr 16 15:48:37 on ttys010","depth":4,"bounds":{"left":0.0,"top":0.08777778,"width":0.9895833,"height":0.9122222},"value":"Last login: Thu Apr 16 15:48:37 on ttys010","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16388889,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.16388889,"top":0.05888889,"width":0.16388889,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.16805555,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.32777777,"top":0.05888889,"width":0.16388889,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33194444,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.16388889,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.65555555,"top":0.05888889,"width":0.16388889,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"login","depth":2,"bounds":{"left":0.8194444,"top":0.05888889,"width":0.16388889,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.82361114,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"login","depth":1,"bounds":{"left":0.4875,"top":0.033333335,"width":0.025,"height":0.017777778},"role_description":"text"}]...
|
3533656538608910916
|
-8175761707498879487
|
click
|
accessibility
|
NULL
|
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Last login: Thu Apr 16 15:48:37 on ttys010
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
login
Close Tab
⌥⌘1
login...
|
40118
|
|
36885
|
751
|
17
|
2026-04-16T11:05:13.955303+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776337513955_m2.jpg...
|
iTerm2
|
login
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-2-41:~ (nc)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"shell","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.5566406,"height":-0.05486107},"is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.29472655,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.29707032,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.35625,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.35859376,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-2-41:~ (nc)","depth":2,"bounds":{"left":0.41777343,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4201172,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.47929686,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.48164064,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5408203,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5431641,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.60234374,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6046875,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Unable to access screenpipe activity data (claude)","depth":2,"bounds":{"left":0.66367185,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8057602384423577961
|
473040738496769981
|
click
|
hybrid
|
NULL
|
shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP shell
DOCKER
Close Tab
DEV (docker)
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-2-41:~ (nc)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Unable to access screenpipe activity data (claude)
ViewPhpStormFV faVsco.jsProjectv=infection.json.distM+INS ALL.moIM- INIEKNALWEOHUOKSEITUPjiminny_storageM+ lIcenses.moM MakefileO package-lock.json= phpstan.neon.distEphpstan-baseline.neon< phpunit.xmlTeraw_sql_query.sqlM-R-ADME. molộ sonar-project.properties= test.py<> Untitled Diagram.xmlus vetur.config.isM+ WEBHOOK_FILTERING_IMPLE› ib External LibrariesE° Scratches and Consoles~ D Database ConsolesNavigateLaravelRefactonWindow( #11894 on JY-18909-automated-reports-ask-jiminny k v© ReportController.phpC TokenBuilder.php©TeamSetupController.phpxphp api.php© SendReportJob.php© AskJiminnyReportsController.php© AutomatedReportsCommandTest.phpAulomaleakeporissendcommand.ong© AutomatedReportsRepository.php© AutomatedReportsService.php© CreateActivityLoggedEvent.phpUserPilotActivityListener.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.php© AutomatedReportsCommand.php© Team.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.php© ActivityLogged.php© AutomatedReportsCallbackService.phpC AutomatedReportResult.phpAutomaleakeportonoclass eaiseruoioncrouler excenos controuterpubLie tunccion incegrattonAppconnect. usonkesponse->setStatusCode( code: JsonResponse: :HTTP_BAD_REQUEST);/** We keep all IntegrationAop providers as "intearation-aop" in the SocialAccount *$crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);195196197/** @var ?SocialAccount $socialAccount */$socialAccount = $user->getSocialAccount($crmProviderKey);if ($socialAccount === null) €$this->logger-›error('[IntegrationApp] Unexpected error. Social account is missing.', ['team_id' => $team->getiId(),'iapR-provider' = SrealProviderKey,provider' => ScrmProviderKey,A console [EUTA DEAL RISKS [EU]A DI [EU]1);199return response()->json([Services# Outputffh Result 10 xv D DatabaseV AEUs console 1s soo lsv Ajiminny@localhost4 SFA HS_localV L PRODA console 10 sV ESAGING4 console 2 s 670 msy Docker1 row vWuser_id• emailDidsociable_idIprovider_user_idI provider user tokenI provider_refresh_tokenexpiresI refresh_token_expiresproviderIO stateauth_scopeI retry_afterI created_atI updated_atprovider_user_token_encryptedprovider_refresh_token_encryptedID encryption_key (Hex)I sociable_typeowner_id= custom.log= laravel.logA SF ljiminny@localhost]V connect.vue< console SIAGING1572A472 A V19/4157510/61577157815791581 v158215851980108/T15881589Ix. Aulo vHlaycroundvJOIN users u on u.id = sa.sociable_idJUreans1..n<->1: on t.id = u.team_idWHERE U. team_id = 400 and sa.provider = 'hubspot';select x trolTearures.select * from team_features where feature_id = 40;select * from teams where id = 556; # owner: 18101, crm: 477select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;ISELECTCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,u.email,sa.*,t.owner id FROM social accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t1..n<->1: on t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integration-app":ile)V Onboard.vueSupport Daily - in 55 m100% C2L AutomatedReportsCommandTestvA HS_local [jiminny@localhost]Al console (EU] X A console [PROD]Thu 16 Apr 14:05:13Eajiminny026 49 A21 Х3 X102 ^• : -csvu|2 1 →lo, ộ,GAAФ18101 (owner)aso-doosc onnont,sni olrouo.con3240718101f132f232-005d-461d-8136-ebf516847f63<huLEeyJ0eXAi0iJKV1QiLCJhbGci0iJIUzI1NiJ9.eyJpZCI6ImYxMzJmМjMyLTAwNWQtNDYхZCO4MTM2LWViZjUхNjg0N2Y2MyIsIm5hbWU¡0iJTaGLqaSBHсm91cCIsImlzcyI6IjY4N2E10WY3LTIyNzYtNDg2Yy04MZA2LTEONTA3ZmQ30TdhZSIsImV4cCI6MTc3NjQyMTA2NywiZmLLbGRzIjp7ImVudiI6InByb2R..16421190<null>Incegracion-appfull-refresh<null><null>2026-04-15 10:06:302026-04-16 1011774eyJpdiI6Implb01VZkc3UmLxTDRPcWLaaTZQbLE9PSIsInZhbHVLIjoiT1VmSUJodGxiQLNNS3LxWHNtRDUOK1R40WpxQi8xNnZHaXdyS2RHMW5GaDMrQzBPUXFodnhRNm0wam40TittRVVEUGRjY1FKWXN0V2NBSnVWc1RzRkRV0VgvdURJaUU2am10SzY5Q0I0d25jem®4bGoyZUxUaGxJMTFTR2LvanJKVOM0cHpw..SnULL>0x010203007822673352371526FE0C9F517F790F4CCE3FCC2CEECFA4BAF34D52AAB42113A7A601CD89287ED1B7C0B9394CA17BA980A7BB0000006E306C06092A864886F70D010706A05F305D020100305806092A864886F70D010701301E060960864801650304012E3011040C56EF5317B70454A1A4user18101SUM: 32407 3:1 W Windsurf Teams 1582:17UTF-84 spaces...
|
36883
|
|
81018
|
2156
|
5
|
2026-04-25T15:56:16.106645+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777132576106_m1.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"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,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
NULL
|
|
81013
|
2157
|
3
|
2026-04-25T15:55:46.216846+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777132546216_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
81009
|
|
80985
|
2152
|
5
|
2026-04-25T15:48:33.457098+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777132113457_m1.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"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,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
NULL
|
|
80984
|
2153
|
14
|
2026-04-25T15:48:33.158123+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777132113158_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
NULL
|
|
80887
|
2143
|
2
|
2026-04-25T15:19:36.065086+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777130376065_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
80886
|
|
80838
|
2138
|
2
|
2026-04-25T15:04:12.760631+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777129452760_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
80837
|
|
80836
|
2137
|
0
|
2026-04-25T15:01:15.777204+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777129275777_m1.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"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,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
80833
|
|
80835
|
2138
|
0
|
2026-04-25T15:01:10.625581+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777129270625_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
80834
|
|
80587
|
2130
|
1
|
2026-04-25T14:29:19.752877+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777127359752_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"}]...
|
5214240239458883788
|
-6284062774660448026
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line...
|
NULL
|
|
80586
|
2129
|
1
|
2026-04-25T14:29:19.675816+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777127359675_m1.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"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,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"}]...
|
5214240239458883788
|
-6284062774660448026
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line...
|
NULL
|
|
80585
|
2129
|
0
|
2026-04-25T14:29:18.612300+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777127358612_m1.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"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,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - master*, Checkout Branch/Tag...","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"role_description":"text"},{"role":"AXButton","text":"screenpipe (Git) - Synchronize Changes","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"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,"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
80582
|
|
80584
|
2130
|
0
|
2026-04-25T14:29:18.274803+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777127358274_m2.jpg...
|
Code
|
lets add ability to jump… — screenpipe [SSH: nas]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G) - 2 pending changes","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.1452514,"width":0.0019946808,"height":0.008778931},"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},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"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},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.00930851,"top":0.2601756,"width":0.0023271276,"height":0.008778931},"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"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},"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},"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},"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.045877658,"height":0.0103751},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.10605053,"top":0.11412609,"width":0.004654255,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.008976064,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.010970744,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.1660016,"width":0.018949468,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.025930852,"top":0.18355946,"width":0.03557181,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.025930852,"top":0.20111732,"width":0.020944148,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.025930852,"top":0.21867518,"width":0.017287234,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.025930852,"top":0.23623304,"width":0.039893616,"height":0.011971269},"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.025930852,"top":0.25379092,"width":0.028590426,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"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},"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},"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"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},"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},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"db.sqlite-shm, preview, Editor Group 1","depth":28,"bounds":{"left":0.23171543,"top":0.047885075,"width":0.04886968,"height":0.02793296},"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.3287899,"top":0.29608938,"width":0.015957447,"height":0.039106146},"role_description":"text"},{"role":"AXStaticText","text":"The editor could not be opened because the file was not found.","depth":27,"bounds":{"left":0.26861703,"top":0.3463687,"width":0.13630319,"height":0.013567438},"role_description":"text"},{"role":"AXButton","text":"Create File","depth":26,"bounds":{"left":0.3238032,"top":0.3719074,"width":0.026263298,"height":0.0207502},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"lets add ability to jump…, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.06948138,"height":0.02793296},"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.59936154,"width":0.027925532,"height":0.02793296},"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.60814047,"width":0.019946808,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.59936154,"width":0.023603724,"height":0.02793296},"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.60814047,"width":0.015625,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.59936154,"width":0.039893616,"height":0.02793296},"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.60814047,"width":0.031914894,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.59936154,"width":0.026595745,"height":0.02793296},"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.60814047,"width":0.01861702,"height":0.0103751},"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.59936154,"width":0.020279255,"height":0.02793296},"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.60814047,"width":0.012300532,"height":0.0103751},"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"master*","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.015957447,"height":0.011173184},"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},"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},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07114362,"top":0.9856345,"width":0.004986702,"height":0.011173184},"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07579787,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.08111702,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.08843085,"top":0.98244214,"width":0.012632979,"height":0.01755786},"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},"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.09541223,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"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,"role_description":"text"},{"role":"AXButton","text":"lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.099734046,"height":0.022346368},"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.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"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,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.\n\nSummary:\n1. Primary Request and Intent:\n\nThe user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:\n- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.\n- **Q2**: AND combination search (term1 + term2 must both appear) → Added \"AND also\" input field.\n- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.\n- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.\n- **Q5**: \"still the same\" (container not picking up config) → Explained `up -d` vs `restart`.\n- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.\n- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.\n- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.\n- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.\n\n2. Key Technical Concepts:\n\n- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.\n- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.\n- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.\n- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.\n- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.\n- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.\n- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.\n- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.\n- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.\n- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.\n- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\\#recycle/`.\n\n3. Files and Code Sections:\n\n- **`/volume1/screenpipe/app/main.py`**\n - Added `/api/apps` endpoint (all unique app names from frames table)\n - Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)\n - `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: \"...\"}`\n - Key snippet:\n ```python","depth":26,"role_description":"text"},{"role":"AXButton","text":"@app.get(\"/api/timetable\"","depth":26,"help_text":"Open app.get(\"/api/timetable\"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":")\n async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):\n ...\n rows = conn.execute(f\"\"\"\n SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,\n f.offset_index, f.snapshot_path,\n vc.file_path AS video_path, vc.fps AS video_fps\n FROM frames f\n JOIN video_chunks vc ON f.video_chunk_id = vc.id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND f.video_chunk_id IS NOT NULL {dev_clause}\n ORDER BY f.timestamp\n \"\"\", params).fetchall()\n # seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)\n ```\n\n- **`/volume1/screenpipe/app/docker-compose.yml`**\n - Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`\n - Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`\n - screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`\n\n- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)\n - **Search enhancements**:\n - Added `id=\"sq2\"` \"AND also\" input between search-row1 and search-row2\n - Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id=\"msOnlyApps\"`, `id=\"msSkipApps\"`)\n - Updated `buildUrl()` to combine `q + \" \" + q2` and convert times with `localTimeToUtc()`\n - Added `fmtDateTime(ts)` showing \"Apr 20 14:08\" format\n - Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC\n - Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`\n - **Timetable tab** (new page):\n - Tab button added between Work Report and AI Summary\n - `showPage` array updated: `['activity','search','audio','report','timetable','summary']`\n - `refresh()` calls `loadTimetable()` when on timetable page\n - **Timetable CSS** (key styles):\n ```css\n .tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }\n .tt-inner { position:relative; height:52px; } /* width set dynamically */\n .tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n .tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n .tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }\n .tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }\n ```\n - **Timetable JS state variables**:\n ```javascript\n let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;\n let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;\n const _ttAppColors = {};\n const TT_ZOOMS = [1, 2, 4, 8, 16, 32];\n const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};\n ```\n - **Key JS functions**:\n - `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders\n - `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead\n - `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)\n - `ttOverviewClick(e)` — scrolls timeline + seeks video\n - `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`\n - `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`\n - `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video\n - `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked\n - `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`\n - `_ttShowNow(f)` — updates screenshot thumbnail + now-text div\n - `ttSyncBtn()` — syncs play/pause button text\n - Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom\n\n- **`/volume1/screenpipe/.gitignore`**\n ```\n *.db, *.sqlite, *.sqlite-shm, *.sqlite-wal\n data/, \\#recycle/,","depth":26,"role_description":"text"},{"role":"AXButton","text":"@eaDir/","depth":26,"help_text":"Open eaDir/","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"app_settings.json, app/.env\n __pycache__/, *.pyc, .DS_Store\n ```\n\n4. Errors and Fixes:\n\n- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\\#recycle/`. Also had to `git rm --cached \"#recycle/desktop.ini\"` to unstage it.\n- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.\n- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.\n- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.\n- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.\n\n5. Problem Solving:\n\n- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.\n- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.\n- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).\n- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.\n\n6. All User Messages:\n\n- \"do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps.\"\n- \"doi I need to restart?\"\n- \"there is sudo docker compose\"\n- \"no still the same\"\n- \"add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git\"\n- \"just do it\" (re: git push)\n- \"how to make sure data in :8767 are accurate and point to archive.db\"\n- \"I can't see older than 16th there should 21st of april. In http://192.168.0.242:8766/ I can see all but not on sqlite viewer http://192.168.0.242:8767\"\n- \"ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive\"\n- [docker compose output showing orphan container error]\n- \"looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast\"\n- \"lets make the playing speed more than 8x\"\n- \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\n7. Pending Tasks:\n\n- **Playback speed fix** (in progress, partially done):\n - Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` inside `ttInner` HTML\n - Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions\n - Update speed select `onchange` to call `ttSetSpeed(+this.value)`\n - Add 64× option to speed select\n - Update `_ttMovePlayhead` to also update `ttPlayheadTime` label\n - Update `ttSyncBtn` to start/stop timer based on play state + speed\n - Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)\n - Rebuild Docker image after changes\n\n8. Current Work:\n\nWorking on fixing two issues with the Timetable tab:\n1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.\n2. **Timeline position indicator**: Playhead not prominent enough. \n\n**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:\n```css\n.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n```\n\nSession was interrupted by summary request after this CSS edit, mid-implementation.\n\n9. Optional Next Step:\n\nContinuing the fix for: \"still playing speed is not showing properly still just in one second. also I want to see in timeline where I am\"\n\nThe next steps in order are:\n1. Add `<div class=\"tt-playhead-time\" id=\"ttPlayheadTime\"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)\n2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`\n3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)\n4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option\n5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer\n6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`\n\nIf you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl\nContinue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with \"I'll continue\" or similar. Pick up the last task as if the break never happened.","depth":26,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find timetable speed and playhead related code","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"tt-playhead\\|ttPlayhead\\|ttInner\\|_ttMovePlayhead\\|ttSetSpeed\\|_ttStartSpeed\\|_ttStopSpeed\\|ttSyncBtn\\|playbackRate\\|speed.*select\\|spdSel\\|ttSpeed\" /volume1/screenpipe/app/static/index.html | head -80","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }\n208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }\n580: <div class=\"tt-inner\" id=\"ttInner\" onclick=\"ttTimelineClick(event)\">\n583: <div class=\"tt-playhead\" id=\"ttPlayhead\"></div>\n598: onpause=\"ttSyncBtn()\"\n599: onplay=\"ttSyncBtn()\">\n607: <select id=\"ttSpeed\" onchange=\"document.getElementById('ttVideo').playbackRate=+this.value\">\n1624: document.getElementById('ttInner').style.width = '100%';\n1632: document.getElementById('ttPlayhead').style.display = 'none';\n1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';\n1700: const inner = document.getElementById('ttInner');\n1710: const inner = document.getElementById('ttInner');\n1718: const inner = document.getElementById('ttInner');\n1750: _ttMovePlayhead(new Date(best.ts).getTime());\n1772: _ttMovePlayhead(new Date(best.ts).getTime());\n1791:function _ttMovePlayhead(tsMs) {\n1792: const ph = document.getElementById('ttPlayhead');\n1802: const ph = document.getElementById('ttPlayhead');\n1805: const inner = document.getElementById('ttInner');\n1819:function ttSyncBtn() {","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 576-625)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1786-1865)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find chunk loading and playhead update functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"ttUpdatePlayhead\\|ttNextChunk\\|ttLoadChunk\\|_ttCurChunk\\|_ttChunks\\|_ttFrames\" /volume1/screenpipe/app/static/index.html | head -50","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"596: onended=\"ttNextChunk()\"\n597: ontimeupdate=\"ttUpdatePlayhead()\"\n1569:let _ttFrames = [];\n1570:let _ttChunks = [];\n1571:let _ttCurChunk = -1;\n1607: _ttFrames = data.frames;\n1609: for (const f of _ttFrames) {\n1613: _ttChunks = [...chunkMap.values()];\n1614: _ttCurChunk = -1;\n1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();\n1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();\n1620: for (const f of _ttFrames) _ttColor(f.app);\n1640: for (const f of _ttFrames) {\n1736: if (!_ttFrames.length) return;\n1737: let best = _ttFrames[0], minDiff = Infinity;\n1738: for (const f of _ttFrames) {\n1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);\n1744: _ttCurChunk = ci;\n1753:function ttNextChunk() {\n1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;\n1755: _ttCurChunk++;\n1757: video.src = _ttChunks[_ttCurChunk][0].video_url;\n1762:function ttUpdatePlayhead() {\n1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;\n1765: const chunk = _ttChunks[_ttCurChunk];","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1754-1793)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1701-1760)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1561-1640)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Find time formatting functions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"grep -n \"function fmtTime\\|function fmtDate\\|function _fmt\\|localTimeToUtc\\|fmtDateTime\" /volume1/screenpipe/app/static/index.html | head -20","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":24,"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,"role_description":"text"},{"role":"AXStaticText","text":"1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;\n1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;\n1153: let meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;\n1166: meta = `<span style=\"color:var(--muted)\">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class=\"badge ${r.is_input_device?'mic':'sys'}\">${r.is_input_device?'MIC':'SYS'}</span>`;\n1307:function fmtTime(ts) {\n1312:function fmtDateTime(ts) {\n1320:function localTimeToUtc(timeStr) {\n1778:function _fmtSec(s) {\n1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Read","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"(lines 1308-1327)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":23,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now I have everything I need. I'll implement the frame-by-frame timer system that replaces","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video.playbackRate","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXLink","text":"index.html","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"index.html","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Added 1 line","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Edit","depth":24,"role_description":"text"}]...
|
809945923361858319
|
-6284062775197318938
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G) - 2 pending changes
2
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
pipes
.gitignore
app_settings.json
archive.db
db.sqlite
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
db.sqlite-shm, preview, Editor Group 1
The editor could not be opened because the file was not found.
Create File
lets add ability to jump…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
screenpipe (Git) - master*, Checkout Branch/Tag...
master*
screenpipe (Git) - Synchronize Changes
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Downloading VS Code Server...
lets add ability to jump fro,m search to timeline so we can see the exact screen (also based on monitor and time
Session history
New session
Message actions
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
1. Primary Request and Intent:
The user has been developing a Screenpipe dashboard on a Synology NAS. Requests in chronological order:
- **Q1**: Are db.sqlite-shm and db.sqlite-wal used? → Explained WAL mode; cleaned up files.
- **Q2**: AND combination search (term1 + term2 must both appear) → Added "AND also" input field.
- **Q3**: Explain UTC time issue, show date in results, make Only/Skip apps use multiselect → Implemented all three.
- **Q4**: Point sqlite-web at archive.db, add second sqlite-web for db.sqlite → Updated docker-compose.yml, added two services on ports 8767/8768.
- **Q5**: "still the same" (container not picking up config) → Explained `up -d` vs `restart`.
- **Q6**: Add git, push to gitea.com/lakylak/screenpipe.git → Initialized repo, committed, pushed.
- **Q7**: Add Timetable tab with video playback and timeline → Full implementation with click-to-seek, auto-advancing chunks, legend.
- **Q8**: Add scroll/zoom on timeline, jump to specific time, better awareness → Implemented zoom (1×–32×), scrollable timeline, overview minimap, viewport indicator, Jump-to-time input, screenshot thumbnail.
- **Q9 (most recent)**: Make playing speed more than 8×, fix speed not working, show position on timeline → CSS fix done (wider playhead + time label style), remainder in progress.
2. Key Technical Concepts:
- **SQLite WAL mode**: db.sqlite-shm and db.sqlite-wal are WAL companion files; cleaned with `PRAGMA wal_checkpoint(TRUNCATE)`.
- **SQLite FTS5**: Space-separated terms = AND; `MATCH 'term1 term2'` requires both; OR requires explicit `OR` keyword.
- **FastAPI**: Python backend with route handlers in main.py, consumers pattern for DB queries.
- **Docker Compose**: App image is built (code baked in), not volume-mounted → requires `build` + `up -d` for code changes. `restart` doesn't re-read compose file — need `up -d`.
- **sqlite-web**: Read-only flag `-r`, pre-built image, no rebuild needed for config changes.
- **Video playback**: screenpipe records at 0.1–0.3 fps (timelapse). `seek = offset_index / fps` gives seconds into video chunk. ~245 chunks/day across 2 monitors. Videos may be encoded at standard fps making them very short at native speed.
- **Timeline rendering**: App-colored segments built by merging consecutive frames with same `app_name`. Percentage positions: `((ts - dayStart) / span * 100)%`.
- **Zoom/scroll**: Inner div width = `zoom × 100%`, outer wrapper has `overflow-x:auto`. Playhead position stays as % of inner div, which is correct at all zoom levels.
- **Timer-based speed**: For speed > 2×, browser `playbackRate` is unreliable on low-FPS video; correct approach is `setInterval` advancing `video.currentTime` by `speed * interval_ms / 1000` seconds per tick.
- **UTC vs local time**: Backend treats `time_from`/`time_to` as UTC. Frontend converts with `localTimeToUtc()` before sending.
- **Git**: `#recycle/` in .gitignore treated as comment — must escape as `\#recycle/`.
3. Files and Code Sections:
- **`/volume1/screenpipe/app/main.py`**
- Added `/api/apps` endpoint (all unique app names from frames table)
- Added `/api/timetable` endpoint (frames + video URLs + screenshot URLs per device per date)
- `/api/timetable` response structure: `{frames: [{ts, app, win, video_url, seek, screenshot_url}], devices: [...], device: "..."}`
- Key snippet:
```python
@app.get("/api/timetable"
)
async def timetable_data(d: str | None = Query(None), device: str | None = Query(None)):
...
rows = conn.execute(f"""
SELECT f.timestamp AS ts, f.app_name AS app, f.window_name AS win,
f.offset_index, f.snapshot_path,
vc.file_path AS video_path, vc.fps AS video_fps
FROM frames f
JOIN video_chunks vc ON f.video_chunk_id = vc.id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND f.video_chunk_id IS NOT NULL {dev_clause}
ORDER BY f.timestamp
""", params).fetchall()
# seek = offset_index / fps, screenshot_url from _snapshot_to_url(snapshot_path)
```
- **`/volume1/screenpipe/app/docker-compose.yml`**
- Changed sqlite-web service name to `sqlite-web-archive` → port 8767 → `/data/archive.db`
- Added `sqlite-web-live` → port 8768 → `/data/db.sqlite`
- screenpipe-app: port 8766, `DB_PATH: /data/db.sqlite`, `TZ: Europe/Sofia`
- **`/volume1/screenpipe/app/static/index.html`** (single large file with all CSS/HTML/JS)
- **Search enhancements**:
- Added `id="sq2"` "AND also" input between search-row1 and search-row2
- Replaced `sOnlyApps`/`sSkipApps` text inputs with custom multiselect components (`id="msOnlyApps"`, `id="msSkipApps"`)
- Updated `buildUrl()` to combine `q + " " + q2` and convert times with `localTimeToUtc()`
- Added `fmtDateTime(ts)` showing "Apr 20 14:08" format
- Added `localTimeToUtc(timeStr)` converting local HH:MM to UTC
- Multiselect state: `const _msState = { msOnlyApps: new Set(), msSkipApps: new Set() }`
- **Timetable tab** (new page):
- Tab button added between Work Report and AI Summary
- `showPage` array updated: `['activity','search','audio','report','timetable','summary']`
- `refresh()` calls `loadTimetable()` when on timetable page
- **Timetable CSS** (key styles):
```css
.tt-scroll-wrap { overflow-x:auto; ... scrollbar-width:thin; }
.tt-inner { position:relative; height:52px; } /* width set dynamically */
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
.tt-overview-wrap { position:relative; height:14px; ... cursor:pointer; }
.tt-overview-vp { position:absolute; background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.4); }
```
- **Timetable JS state variables**:
```javascript
let _ttFrames = [], _ttChunks = [], _ttCurChunk = -1;
let _ttDayStart = 0, _ttDayEnd = 0, _ttZoom = 1;
const _ttAppColors = {};
const TT_ZOOMS = [1, 2, 4, 8, 16, 32];
const TT_TICK_MIN = {1:30, 2:15, 4:10, 8:5, 16:2, 32:1};
```
- **Key JS functions**:
- `loadTimetable()` — fetches `/api/timetable`, groups chunks, renders
- `ttZoom(dir)` — changes zoom level, updates inner width, re-renders ticks, scrolls to playhead
- `ttTimelineClick(e)` — uses `inner.getBoundingClientRect()` (works correctly when scrolled)
- `ttOverviewClick(e)` — scrolls timeline + seeks video
- `ttUpdateOverviewVp()` — updates white viewport rect using `wrap.scrollLeft / inner.scrollWidth`
- `ttJumpToTime()` — parses time input, converts to ms, calls `ttSeekToMs`
- `ttSeekToMs(tsMs)` — binary-searches nearest frame, loads chunk, seeks video
- `_ttScrollToPlayhead(force)` — scrolls wrap so playhead stays at ~35% from left when Follow is checked
- `_ttMovePlayhead(tsMs)` — sets `ph.style.left` as percentage, calls `_ttScrollToPlayhead`
- `_ttShowNow(f)` — updates screenshot thumbnail + now-text div
- `ttSyncBtn()` — syncs play/pause button text
- Keyboard: Space=play/pause, ←/→=±10s, Ctrl+←/→=±30s, +/-=zoom
- **`/volume1/screenpipe/.gitignore`**
```
*.db, *.sqlite, *.sqlite-shm, *.sqlite-wal
data/, \#recycle/,
@eaDir/
app_settings.json, app/.env
__pycache__/, *.pyc, .DS_Store
```
4. Errors and Fixes:
- **`#recycle/` in .gitignore treated as comment**: `#` starts a comment in .gitignore. Fixed by escaping: `\#recycle/`. Also had to `git rm --cached "#recycle/desktop.ini"` to unstage it.
- **`sudo docker compose restart sqlite-web` didn't apply config change**: `restart` reuses existing container config, doesn't re-read compose file. Fix: `sudo docker compose up -d` recreates containers with new config.
- **Orphan container holding port 8767**: Old `screenpipe-sqlweb` container still running after rename. Fix: `sudo docker compose up -d --remove-orphans`.
- **`sudo docker` not accessible from Claude Code**: Interactive sudo required. User runs commands in NAS terminal.
- **`git config --global --add safe.directory /volume1/screenpipe`**: Required due to dubious ownership of NAS volume directory.
5. Problem Solving:
- **Time zone confusion in search**: Backend uses UTC for time_from/time_to; frontend displays local time. Solved by `localTimeToUtc()` converting before API call, and showing date+time in results.
- **sqlite-web not showing April 17–21 data**: Container was pointing at db.sqlite (old config), not archive.db. Fixed by updating docker-compose.yml + `up -d`.
- **Video playback speed**: Browser `video.playbackRate` is capped (~16× max in Chrome) and performs poorly for very low FPS (0.1–0.3 fps) screenpipe videos. Each chunk may only be 1–2 seconds of wall-clock encoded video, playing through instantly. Solution: implement timer-based frame-jumping for speed > 2× (in progress).
- **Playhead visibility**: White 2px line was hard to see. Fixed CSS to 3px width + stronger box-shadow + added `.tt-playhead-time` overlay label style.
6. All User Messages:
- "do we use db.sqlite-shm and db.sqlite-wal for anything right now? [image of search UI] Lets add ability to search with combination... Explain how does the search work time seems to work in utc maybe display date next to the time in results. Make only apps and skip apps multiselect with all available apps."
- "doi I need to restart?"
- "there is sudo docker compose"
- "no still the same"
- "add git. I have created gitea repo https://gitea.com/lakylak/screenpipe.git"
- "just do it" (re: git push)
- "how to make sure data in :8767 are accurate and point to archive.db"
- "I can't see older than 16th there should 21st of april. In http://[IP_ADDRESS]:8766/ I can see all but not on sqlite viewer http://[IP_ADDRESS]:8767"
- "ok lets add additional port to read db.sqlite, I would like to see the structure of official db that reads db.sqlite db and one for archive"
- [docker compose output showing orphan container error]
- "looks great. I want to have ability to scroll left and right and also to jump to specific time. I want to be more aware to what I see. Still it should be fast"
- "lets make the playing speed more than 8x"
- "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
7. Pending Tasks:
- **Playback speed fix** (in progress, partially done):
- Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` inside `ttInner` HTML
- Implement `_ttStartSpeedTimer(speed)` / `_ttStopSpeedTimer()` / `ttSetSpeed(speed)` functions
- Update speed select `onchange` to call `ttSetSpeed(+this.value)`
- Add 64× option to speed select
- Update `_ttMovePlayhead` to also update `ttPlayheadTime` label
- Update `ttSyncBtn` to start/stop timer based on play state + speed
- Update `ttNextChunk` and `ttSeekToMs` to stop timer (restarted by onplay → ttSyncBtn)
- Rebuild Docker image after changes
8. Current Work:
Working on fixing two issues with the Timetable tab:
1. **Playback speed**: `video.playbackRate` doesn't work well for low-FPS screenpipe videos. The plan is to implement a `setInterval`-based frame-jumper for speed > 2× that advances `video.currentTime` by `speed * intervalMs / 1000` every 100–200ms, bypassing browser playbackRate limits.
2. **Timeline position indicator**: Playhead not prominent enough.
**CSS already changed** in `/volume1/screenpipe/app/static/index.html`:
```css
.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
```
Session was interrupted by summary request after this CSS edit, mid-implementation.
9. Optional Next Step:
Continuing the fix for: "still playing speed is not showing properly still just in one second. also I want to see in timeline where I am"
The next steps in order are:
1. Add `<div class="tt-playhead-time" id="ttPlayheadTime"></div>` to the HTML inside `#ttInner` (after the existing `.tt-playhead` div)
2. Update `_ttMovePlayhead` to set `ttPlayheadTime` position and text content with `fmtTime()`
3. Add timer-based speed system to JS (new functions `_ttStartSpeedTimer`, `_ttStopSpeedTimer`, `ttSetSpeed`)
4. Update speed select's `onchange` to `ttSetSpeed(+this.value)` and add 64× option
5. Update `ttSyncBtn`, `ttNextChunk`, `ttSeekToMs` to integrate with timer
6. Rebuild: `sudo docker compose build screenpipe-app && sudo docker compose up -d screenpipe-app`
If you need specific details from before compaction (like exact code snippets, error messages, or content you generated), read the full transcript at: /home/Adm1n/.claude/projects/-volume1-screenpipe/7777f46e-1e40-4051-b4bb-f43aedd59556.jsonl
Continue the conversation from where it left off without asking the user any further questions. Resume directly — do not acknowledge the summary, do not recap what was happening, do not preface with "I'll continue" or similar. Pick up the last task as if the break never happened.
Thinking
Thinking
Bash
Find timetable speed and playhead related code
IN
grep -n "tt-playhead\|ttPlayhead\|ttInner\|_ttMovePlayhead\|ttSetSpeed\|_ttStartSpeed\|_ttStopSpeed\|ttSyncBtn\|playbackRate\|speed.*select\|spdSel\|ttSpeed" /volume1/screenpipe/app/static/index.html | head -80
Copy code to clipboard
OUT
207:.tt-playhead { position:absolute; top:0; width:3px; height:36px; background:white; box-shadow:0 0 8px rgba(255,255,255,.9); z-index:10; pointer-events:none; display:none; }
208:.tt-playhead-time { position:absolute; top:2px; font-size:9px; font-weight:600; color:white; background:rgba(0,0,0,.75); padding:1px 4px; border-radius:2px; white-space:nowrap; transform:translateX(-50%); z-index:12; pointer-events:none; display:none; }
580: <div class="tt-inner" id="ttInner" onclick="ttTimelineClick(event)">
583: <div class="tt-playhead" id="ttPlayhead"></div>
598: onpause="ttSyncBtn()"
599: onplay="ttSyncBtn()">
607: <select id="ttSpeed" onchange="document.getElementById('ttVideo').playbackRate=+this.value">
1624: document.getElementById('ttInner').style.width = '100%';
1632: document.getElementById('ttPlayhead').style.display = 'none';
1694: document.getElementById('ttInner').style.width = (_ttZoom * 100) + '%';
1700: const inner = document.getElementById('ttInner');
1710: const inner = document.getElementById('ttInner');
1718: const inner = document.getElementById('ttInner');
1750: _ttMovePlayhead(new Date(best.ts).getTime());
1772: _ttMovePlayhead(new Date(best.ts).getTime());
1791:function _ttMovePlayhead(tsMs) {
1792: const ph = document.getElementById('ttPlayhead');
1802: const ph = document.getElementById('ttPlayhead');
1805: const inner = document.getElementById('ttInner');
1819:function ttSyncBtn() {
Read
index.html
index.html
(lines 576-625)
Read
index.html
index.html
(lines 1786-1865)
Thinking
Thinking
Bash
Find chunk loading and playhead update functions
IN
grep -n "ttUpdatePlayhead\|ttNextChunk\|ttLoadChunk\|_ttCurChunk\|_ttChunks\|_ttFrames" /volume1/screenpipe/app/static/index.html | head -50
Copy code to clipboard
OUT
596: onended="ttNextChunk()"
597: ontimeupdate="ttUpdatePlayhead()"
1569:let _ttFrames = [];
1570:let _ttChunks = [];
1571:let _ttCurChunk = -1;
1607: _ttFrames = data.frames;
1609: for (const f of _ttFrames) {
1613: _ttChunks = [...chunkMap.values()];
1614: _ttCurChunk = -1;
1616: _ttDayStart = new Date(_ttFrames[0].ts).getTime();
1617: _ttDayEnd = new Date(_ttFrames[_ttFrames.length - 1].ts).getTime();
1620: for (const f of _ttFrames) _ttColor(f.app);
1640: for (const f of _ttFrames) {
1736: if (!_ttFrames.length) return;
1737: let best = _ttFrames[0], minDiff = Infinity;
1738: for (const f of _ttFrames) {
1742: const ci = _ttChunks.findIndex(ch => ch[0].video_url === best.video_url);
1744: _ttCurChunk = ci;
1753:function ttNextChunk() {
1754: if (_ttCurChunk + 1 >= _ttChunks.length) return;
1755: _ttCurChunk++;
1757: video.src = _ttChunks[_ttCurChunk][0].video_url;
1762:function ttUpdatePlayhead() {
1764: if (_ttCurChunk < 0 || _ttCurChunk >= _ttChunks.length) return;
1765: const chunk = _ttChunks[_ttCurChunk];
Read
index.html
index.html
(lines 1754-1793)
Thinking
Thinking
Read
index.html
index.html
(lines 1701-1760)
Thinking
Thinking
Read
index.html
index.html
(lines 1561-1640)
Thinking
Thinking
Bash
Find time formatting functions
IN
grep -n "function fmtTime\|function fmtDate\|function _fmt\|localTimeToUtc\|fmtDateTime" /volume1/screenpipe/app/static/index.html | head -20
Copy code to clipboard
OUT
1088: if (tf) url += `&time_from=${localTimeToUtc(tf)}`;
1089: if (tt) url += `&time_to=${localTimeToUtc(tt)}`;
1153: let meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge}`;
1166: meta = `<span style="color:var(--muted)">${fmtDateTime(r.timestamp)}</span>${srcBadge} <span class="badge ${r.is_input_device?'mic':'sys'}">${r.is_input_device?'MIC':'SYS'}</span>`;
1307:function fmtTime(ts) {
1312:function fmtDateTime(ts) {
1320:function localTimeToUtc(timeStr) {
1778:function _fmtSec(s) {
1788: `${fmtDateTime(f.ts)} · ${f.app}${f.win ? ' / ' + f.win : ''}`;
Read
index.html
index.html
(lines 1308-1327)
Thinking
Thinking
Now I have everything I need. I'll implement the frame-by-frame timer system that replaces
video.playbackRate
with wall-clock accurate playback, plus add the playhead time label. Let me make the changes:
Edit
index.html
index.html
Added 1 line
Edit...
|
80583
|
|
68717
|
1560
|
7
|
2026-04-22T06:33:38.480161+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-22/1776 /Users/lukas/.screenpipe/data/data/2026-04-22/1776839618480_m1.jpg...
|
iTerm2
|
less
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Mon Apr 20 19:49:44 on ttys010
Poetry Last login: Mon Apr 20 19:49:44 on ttys010
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 ~ $ lock
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 356, done.
remote: Counting objects: 100% (288/288), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 356 (delta 247), reused 271 (delta 239), pack-reused 68 (from 1)
Receiving objects: 100% (356/356), 85.58 KiB | 973.00 KiB/s, done.
Resolving deltas: 100% (267/267), completed with 94 local objects.
From github.com:jiminny/app
4eec6ce5d2..b37b0452a5 master -> origin/master
752fb7ac1d..724fdb0917 JY-18909-automated-reports-ask-jiminny -> origin/JY-18909-automated-reports-ask-jiminny
cf378aa07b..a21d53727d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
+ f0119c9d87...b0e5590d49 JY-20701-reschedule-HubSpot-processing -> origin/JY-20701-reschedule-HubSpot-processing (forced update)
* [new branch] JY-20705-fix-ai-call-scoring-issue -> origin/JY-20705-fix-ai-call-scoring-issue
* [new branch] JY-20708-elasticsearch-new-activities -> origin/JY-20708-elasticsearch-new-activities
* [new branch] JY-20709-call-scoring-delete-old -> origin/JY-20709-call-scoring-delete-old
f4d9b3911b..e6daaf72c3 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration
3872fca88d..6352d781ad feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file
Updating 4eec6ce5d2..b37b0452a5
Fast-forward
app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 +++++
app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++++
app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++++++++++++++++++++++---
tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 ++++++++++++++++++++++++++++++++++
tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
6 files changed, 372 insertions(+), 4 deletions(-)
create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git status
On branch JY-18909-automated-reports-ask-jiminny
Your branch is behind 'origin/JY-18909-automated-reports-ask-jiminny' by 38 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Http/Controllers/API/ActivityController.php
modified: app/Http/Controllers/API/UserAutomatedReports/UserAutomatedReportsController.php
modified: app/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJob.php
modified: app/Jobs/Team/SyncToIntercom.php
modified: app/Repositories/AutomatedReportsRepository.php
modified: app/Services/PlaybackService.php
modified: config/logging.php
modified: routes/web.php
modified: tests/Unit/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJobTest.php
modified: tests/Unit/Repositories/AutomatedReportsRepositoryTest.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
app/Jobs/AutomatedReports/SendReportNotGeneratedMailJob.php
app/Mail/Reports/ReportNotGenerated.php
ids.txt
raw_sql_query.sql
resources/views/emails/reports/report-not-generated.blade.php
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ git pull
remote: Enumerating objects: 527, done.
remote: Counting objects: 100% (191/191), done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 527 (delta 155), reused 152 (delta 152), pack-reused 336 (from 2)
Receiving objects: 100% (527/527), 178.12 KiB | 996.00 KiB/s, done.
Resolving deltas: 100% (330/330), completed with 51 local objects.
From github.com:jiminny/app
* [new branch] JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages
a21d53727d..166c403a12 JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
f301b758d4..10d290c778 JY-20663-partner-rockeed -> origin/JY-20663-partner-rockeed
e6daaf72c3..60141f6907 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration
6352d781ad..e2859d4d0e feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file
b37b0452a5..a581c3fc69 master -> origin/master
* [new branch] transcription-es-update-guard -> origin/transcription-es-update-guard
Updating 96e71f9934..724fdb0917
Fast-forward
app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 ++
app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++
app/Console/Commands/Crm/SyncObjects.php | 34 +++++++----
app/Http/Controllers/Internal/WebhookReceiver/HubspotController.php | 5 +-
app/Http/Controllers/Webhook/Hubspot/EventsController.php | 6 +-
app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 75 ++++++++++++++++++++----
app/Jobs/Crm/SyncObjects.php | 38 +++++++-----
app/Jobs/Crm/SyncOpportunitiesJob.php | 12 +++-
app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++-
app/Services/Crm/BaseService.php | 53 ++++++++++++++---
app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 17 ++++--
composer.lock | 46 +++++++--------
front-end/src/components/connect/connect.vue | 30 +++++-----
front-end/src/components/onboard/Onboard.vue | 2 +-
tests/Feature/Services/Crm/BaseServiceTest.php | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 ++++++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 +++++++++++
tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Jobs/Crm/SyncObjectsTest.php | 113 ++++++++++++++++++-----------------
tests/Unit/Jobs/Crm/SyncOpportunitiesJobTest.php | 30 +++++-----
tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 2 +-
tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
23 files changed, 1319 insertions(+), 174 deletions(-)
create mode 100644 tests/Feature/Services/Crm/BaseServiceTest.php
create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php
create mode 100644 tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php
create mode 100644 tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5609 files in 32.620 seconds, 67.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5609 files in 36.627 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
1) routes/web.php (statement_indentation)
---------- begin diff ----------
--- /home/jiminny/routes/web.php
+++ /home/jiminny/routes/web.php
@@ -148,57 +148,57 @@
$router->get('/playback/{activity}', [PlaybackController::class, 'show'])
->name('activity.playback');
- // AI Reports
- $router->get('/ai-reports', [
- FrontendController::class, 'render',
- ])
- ->middleware(['can:canAccessAiReports,' . User::class])
- ->name('ai.reports.show');
+ // AI Reports
+ $router->get('/ai-reports', [
+ FrontendController::class, 'render',
+ ])
+ ->middleware(['can:canAccessAiReports,' . User::class])
+ ->name('ai.reports.show');
- $router->get('/ai-reports/manage', [
- FrontendController::class, 'render',
- ])
- ->middleware(['can:canAccessAiReports,' . User::class])
- ->name('ai.reports.manage');
+ $router->get('/ai-reports/manage', [
+ FrontendController::class, 'render',
+ ])
+ ->middleware(['can:canAccessAiReports,' . User::class])
+ ->name('ai.reports.manage');
- $router->get('/ai-reports/pdf/{uuid}', [
- Controllers\UserAutomatedReportsController::class, 'view',
- ])->name('ai-reports.pdf.view');
+ $router->get('/ai-reports/pdf/{uuid}', [
+ Controllers\UserAutomatedReportsController::class, 'view',
+ ])->name('ai-reports.pdf.view');
- $router->get('/ai-reports/pdf/{uuid}/download', [
- Controllers\UserAutomatedReportsController::class, 'download',
- ])->name('ai-reports.pdf.download');
+ $router->get('/ai-reports/pdf/{uuid}/download', [
+ Controllers\UserAutomatedReportsController::class, 'download',
+ ])->name('ai-reports.pdf.download');
- $router->get('/ai-reports/audio/{uuid}', [
- Controllers\UserAutomatedReportsController::class, 'view',
- ])->name('ai-reports.audio.view');
+ $router->get('/ai-reports/audio/{uuid}', [
+ Controllers\UserAutomatedReportsController::class, 'view',
+ ])->name('ai-reports.audio.view');
- $router->get('/ai-reports/audio/{uuid}/download', [
- Controllers\UserAutomatedReportsController::class, 'download',
- ])->name('ai-reports.audio.download');
+ $router->get('/ai-reports/audio/{uuid}/download', [
+ Controllers\UserAutomatedReportsController::class, 'download',
+ ])->name('ai-reports.audio.download');
-// $router->group(
-// ['middleware' => ['can:canAccessAiReports,' . User::class]],
-// static function (Router $router): void {
-// $router->get('/ai-reports', [FrontendController::class, 'render'])
-// ->name('ai.reports.show');
-//
-// $router->get('/ai-reports/manage', [FrontendController::class, 'render'])
-// ->name('ai.reports.manage');
-//
-// $router->get('/ai-reports/pdf/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
-// ->name('ai-reports.pdf.view');
-//
-// $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
-// ->name('ai-reports.pdf.download');
-//
-// $router->get('/ai-reports/audio/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
-// ->name('ai-reports.audio.view');
-//
-// $router->get('/ai-reports/audio/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
-// ->name('ai-reports.audio.download');
-// }
-// );
+ // $router->group(
+ // ['middleware' => ['can:canAccessAiReports,' . User::class]],
+ // static function (Router $router): void {
+ // $router->get('/ai-reports', [FrontendController::class, 'render'])
+ // ->name('ai.reports.show');
+ //
+ // $router->get('/ai-reports/manage', [FrontendController::class, 'render'])
+ // ->name('ai.reports.manage');
+ //
+ // $router->get('/ai-reports/pdf/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
+ // ->name('ai-reports.pdf.view');
+ //
+ // $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
+ // ->name('ai-reports.pdf.download');
+ //
+ // $router->get('/ai-reports/audio/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
+ // ->name('ai-reports.audio.view');
+ //
+ // $router->get('/ai-reports/audio/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
+ // ->name('ai-reports.audio.download');
+ // }
+ // );
// Playback of audio streams.
$router->get('/stream/{track}', [AudioController::class, 'streamTrack'])
----------- end diff -----------
Fixed 1 of 5609 files in 38.740 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 582, done.
remote: Counting objects: 100% (506/506), done.
remote: Compressing objects: 100% (80/80), done.
remote: Total 582 (delta 436), reused 474 (delta 422), pack-reused 76 (from 2)
Receiving objects: 100% (582/582), 185.10 KiB | 1.13 MiB/s, done.
Resolving deltas: 100% (458/458), completed with 97 local objects.
From github.com:jiminny/app
a581c3fc69..d207a770d8 master -> origin/master
* [new branch] JY-19995-delete-leftover-tracks-command -> origin/JY-19995-delete-leftover-tracks-command
2ffa898e3a..27d4be4a6d JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages
* [new branch] JY-20489-hudges-phase2 -> origin/JY-20489-hudges-phase2
166c403a12..36292c160d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
0ea8d92cd8..b9b830afd5 JY-20541-remove-crm-contract-method -> origin/JY-20541-remove-crm-contract-method
60141f6907..242cf1b554 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration
Updating b37b0452a5..d207a770d8
Fast-forward
Makefile | 5 +
app/Component/Activity/Services/UpdateActivityService.php | 5 +
app/Component/AiCallScoring/Services/GenerateAiCallScoringService.php | 6 +
app/Component/AiCallScoring/Services/GetAiCallScoringService.php | 5 +-
app/Component/AiCallScoring/Transformers/AiCallScoringTransformer.php | 2 +-
app/Component/ElasticSearch/Model/Observer.php | 4 +-
app/Console/Commands/Crm/SyncHubspotObjects.php | 84 ++++++++++++++
app/Console/Commands/Crm/SyncObjects.php | 82 ++++++++------
app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php | 81 +++++++++++++
app/Console/Kernel.php | 4 +
app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 37 +++---
app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRequest.php | 2 +-
app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRuleRequest.php | 2 +-
app/Http/Requests/Settings/AiCallScoring/TestAiCallScoringPromptRequest.php | 2 +-
app/Jobs/Crm/SyncHubspotObjects.php | 122 ++++++++++++++++++++
app/Jobs/Crm/SyncObjects.php | 24 ++--
app/Models/Ai/AiScorecardRuleRun.php | 4 +-
app/Models/Ai/AiScorecardRun.php | 4 +-
app/Repositories/Crm/CrmEntityRepository.php | 40 +++++++
app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 174 +++++++++++++++++++++-------
app/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTrait.php | 27 ++---
front-end/src/__mocks__/kit/endpoints/team-insights.js | 1 +
front-end/src/components/Settings/OrgSettings/AiAutomation/CallScoring/ScorecardRuleForm.vue | 2 +-
front-end/src/components/TeamInsights/CoachingFrameworks/AICallScoring/aiCallScoringOverTime.ts | 18 ++-
tests/Unit/Component/Activity/Services/UpdateActivityServiceTest.php | 62 ++++++++++
tests/Unit/Component/AiCallScoring/Services/GenerateAiCallScoringServiceTest.php | 13 ++-
tests/Unit/Component/ElasticSearch/Model/ObserverTest.php | 98 ++++++++++++++++
tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 5 +-
tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php | 455 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 74 +++++++-----
tests/Unit/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTraitTest.php | 8 +-
31 files changed, 1272 insertions(+), 180 deletions(-)
create mode 100644 app/Console/Commands/Crm/SyncHubspotObjects.php
create mode 100644 app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php
create mode 100644 app/Jobs/Crm/SyncHubspotObjects.php
create mode 100644 tests/Unit/Component/ElasticSearch/Model/ObserverTest.php
create mode 100644 tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0 (from 0)
Unpacking objects: 100% (5/5), 488 bytes | 32.00 KiB/s, done.
From github.com:jiminny/app
d439494641..f044edca5b secfix/npm-20260416 -> origin/secfix/npm-20260416
Already up to date.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git fetch
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 14 (delta 10), reused 14 (delta 10), pack-reused 0 (from 0)
Unpacking objects: 100% (14/14), 1.16 KiB | 84.00 KiB/s, done.
From github.com:jiminny/app
36292c160d..46202df90a JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branc -a
git: 'branc' is not a git command. See 'git --help'.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branch -a
20118-hs-opportunity-make-webhook-strategy-default
JMNY-4047-hubspot-v3-api-upgrade
JY-10125-close-copper-setup-crm-command
JY-10153-talkdesk-import-calls
JY-10173-add-additional-logs
JY-10173-add-logs-to-close-crm-log
JY-10291-setup-twilio-video-command
JY-10379-import-call-with-crm-data
JY-10455-fix-sentry-error-on-no-task-matched
JY-10514-fix-duplicated-prospect-participants
JY-10698-add-performance-monitor-on-DI
JY-10742-fix-office-recurring-events
JY-10797-reorder-prospect-lookup
JY-10804-social-account-token-sentry-issues
JY-10877-add-additional-filter-twilio-video
JY-10877-filter-out-open-rooms-twilio-video
JY-10925-create-participants-before-processing
JY-10930-pass-autolog-state-to-activity-data
JY-10989-add-opportunity-support-on-twilio-video
JY-11040
JY-11060-replace-deprecated-methods
JY-11102-change-retry-time-for-match-crm-data
JY-11148-remove-rollback-from-change-type-migration
JY-11148-sentry-quota-issue
JY-11167-justcall-download-track
JY-11170-emails-import
JY-11171-enable-microsoft-dutch-transcription
JY-11193-customer-[API_KEY]
JY-11203-fix-dialpad-issue
JY-11204-twilio-flex-presales-calls
JY-11265-clear-crm-data-when-prospect-removed
JY-11266-remove-ms-id-passcode-workaround
JY-11325-twilio-video-handle-unsupported-custom-objects
JY-11340-twilio-flex-direct-integration
JY-11456-change-hubspot-match-by-phone-number-search
JY-11465-remove-team-crm-provider-unique-on-crm-object-tables
JY-11503-aircall-tags-activity-type-mapping-crm
JY-11594-crm-log-reminder-changes
JY-11624-fix-postmark-sync
JY-11669-twilio-video-activity-type
JY-11720-hubspot-owner-api-change
JY-11756-JY-12102-delete-past-calendar-events
JY-11756-remove-activities-foreign-from-calendar-event
JY-11757-fix-close-crm-find-query-logic
:
DOCKER
Close Tab
-zsh
Close Tab
less
Close Tab
✳ Build full day activity summary from Screenpipe (claude)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-159-186:~ (-zsh)
Close Tab
⌥⌘1
less...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Mon Apr 20 19:49:44 on ttys010\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 ~ $ lock\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 356, done.\nremote: Counting objects: 100% (288/288), done.\nremote: Compressing objects: 100% (49/49), done.\nremote: Total 356 (delta 247), reused 271 (delta 239), pack-reused 68 (from 1)\nReceiving objects: 100% (356/356), 85.58 KiB | 973.00 KiB/s, done.\nResolving deltas: 100% (267/267), completed with 94 local objects.\nFrom github.com:jiminny/app\n 4eec6ce5d2..b37b0452a5 master -> origin/master\n 752fb7ac1d..724fdb0917 JY-18909-automated-reports-ask-jiminny -> origin/JY-18909-automated-reports-ask-jiminny\n cf378aa07b..a21d53727d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\n + f0119c9d87...b0e5590d49 JY-20701-reschedule-HubSpot-processing -> origin/JY-20701-reschedule-HubSpot-processing (forced update)\n * [new branch] JY-20705-fix-ai-call-scoring-issue -> origin/JY-20705-fix-ai-call-scoring-issue\n * [new branch] JY-20708-elasticsearch-new-activities -> origin/JY-20708-elasticsearch-new-activities\n * [new branch] JY-20709-call-scoring-delete-old -> origin/JY-20709-call-scoring-delete-old\n f4d9b3911b..e6daaf72c3 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration\n 3872fca88d..6352d781ad feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file\nUpdating 4eec6ce5d2..b37b0452a5\nFast-forward\n app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 +++++\n app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++++\n app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++++++++++++++++++++++---\n tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 ++++++++++++++++++++++++++++++++++\n tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-\n 6 files changed, 372 insertions(+), 4 deletions(-)\n create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git status\nOn branch JY-18909-automated-reports-ask-jiminny\nYour branch is behind 'origin/JY-18909-automated-reports-ask-jiminny' by 38 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Http/Controllers/API/ActivityController.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Http/Controllers/API/UserAutomatedReports/UserAutomatedReportsController.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJob.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Team/SyncToIntercom.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Repositories/AutomatedReportsRepository.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/PlaybackService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: routes/web.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: tests/Unit/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJobTest.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: tests/Unit/Repositories/AutomatedReportsRepositoryTest.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Jobs/AutomatedReports/SendReportNotGeneratedMailJob.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Mail/Reports/ReportNotGenerated.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tresources/views/emails/reports/report-not-generated.blade.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ git pull\nremote: Enumerating objects: 527, done.\nremote: Counting objects: 100% (191/191), done.\nremote: Compressing objects: 100% (39/39), done.\nremote: Total 527 (delta 155), reused 152 (delta 152), pack-reused 336 (from 2)\nReceiving objects: 100% (527/527), 178.12 KiB | 996.00 KiB/s, done.\nResolving deltas: 100% (330/330), completed with 51 local objects.\nFrom github.com:jiminny/app\n * [new branch] JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages\n a21d53727d..166c403a12 JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\n f301b758d4..10d290c778 JY-20663-partner-rockeed -> origin/JY-20663-partner-rockeed\n e6daaf72c3..60141f6907 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration\n 6352d781ad..e2859d4d0e feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file\n b37b0452a5..a581c3fc69 master -> origin/master\n * [new branch] transcription-es-update-guard -> origin/transcription-es-update-guard\nUpdating 96e71f9934..724fdb0917\nFast-forward\n app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 ++\n app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++\n app/Console/Commands/Crm/SyncObjects.php | 34 +++++++----\n app/Http/Controllers/Internal/WebhookReceiver/HubspotController.php | 5 +-\n app/Http/Controllers/Webhook/Hubspot/EventsController.php | 6 +-\n app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 75 ++++++++++++++++++++----\n app/Jobs/Crm/SyncObjects.php | 38 +++++++-----\n app/Jobs/Crm/SyncOpportunitiesJob.php | 12 +++-\n app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++-\n app/Services/Crm/BaseService.php | 53 ++++++++++++++---\n app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 17 ++++--\n composer.lock | 46 +++++++--------\n front-end/src/components/connect/connect.vue | 30 +++++-----\n front-end/src/components/onboard/Onboard.vue | 2 +-\n tests/Feature/Services/Crm/BaseServiceTest.php | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 ++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 +++++++++++\n tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Jobs/Crm/SyncObjectsTest.php | 113 ++++++++++++++++++-----------------\n tests/Unit/Jobs/Crm/SyncOpportunitiesJobTest.php | 30 +++++-----\n tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++-\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 2 +-\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n 23 files changed, 1319 insertions(+), 174 deletions(-)\n create mode 100644 tests/Feature/Services/Crm/BaseServiceTest.php\n create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php\n create mode 100644 tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php\n create mode 100644 tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 32.620 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 37.187 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-conferences:worker-conferences_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 36.627 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 54.393 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) routes/web.php (statement_indentation)\n ---------- begin diff ----------\n--- /home/jiminny/routes/web.php\n+++ /home/jiminny/routes/web.php\n@@ -148,57 +148,57 @@\n $router->get('/playback/{activity}', [PlaybackController::class, 'show'])\n ->name('activity.playback');\n \n- // AI Reports\n- $router->get('/ai-reports', [\n- FrontendController::class, 'render',\n- ])\n- ->middleware(['can:canAccessAiReports,' . User::class])\n- ->name('ai.reports.show');\n+ // AI Reports\n+ $router->get('/ai-reports', [\n+ FrontendController::class, 'render',\n+ ])\n+ ->middleware(['can:canAccessAiReports,' . User::class])\n+ ->name('ai.reports.show');\n \n- $router->get('/ai-reports/manage', [\n- FrontendController::class, 'render',\n- ])\n- ->middleware(['can:canAccessAiReports,' . User::class])\n- ->name('ai.reports.manage');\n+ $router->get('/ai-reports/manage', [\n+ FrontendController::class, 'render',\n+ ])\n+ ->middleware(['can:canAccessAiReports,' . User::class])\n+ ->name('ai.reports.manage');\n \n- $router->get('/ai-reports/pdf/{uuid}', [\n- Controllers\\UserAutomatedReportsController::class, 'view',\n- ])->name('ai-reports.pdf.view');\n+ $router->get('/ai-reports/pdf/{uuid}', [\n+ Controllers\\UserAutomatedReportsController::class, 'view',\n+ ])->name('ai-reports.pdf.view');\n \n- $router->get('/ai-reports/pdf/{uuid}/download', [\n- Controllers\\UserAutomatedReportsController::class, 'download',\n- ])->name('ai-reports.pdf.download');\n+ $router->get('/ai-reports/pdf/{uuid}/download', [\n+ Controllers\\UserAutomatedReportsController::class, 'download',\n+ ])->name('ai-reports.pdf.download');\n \n- $router->get('/ai-reports/audio/{uuid}', [\n- Controllers\\UserAutomatedReportsController::class, 'view',\n- ])->name('ai-reports.audio.view');\n+ $router->get('/ai-reports/audio/{uuid}', [\n+ Controllers\\UserAutomatedReportsController::class, 'view',\n+ ])->name('ai-reports.audio.view');\n \n- $router->get('/ai-reports/audio/{uuid}/download', [\n- Controllers\\UserAutomatedReportsController::class, 'download',\n- ])->name('ai-reports.audio.download');\n+ $router->get('/ai-reports/audio/{uuid}/download', [\n+ Controllers\\UserAutomatedReportsController::class, 'download',\n+ ])->name('ai-reports.audio.download');\n \n-// $router->group(\n-// ['middleware' => ['can:canAccessAiReports,' . User::class]],\n-// static function (Router $router): void {\n-// $router->get('/ai-reports', [FrontendController::class, 'render'])\n-// ->name('ai.reports.show');\n-//\n-// $router->get('/ai-reports/manage', [FrontendController::class, 'render'])\n-// ->name('ai.reports.manage');\n-//\n-// $router->get('/ai-reports/pdf/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n-// ->name('ai-reports.pdf.view');\n-//\n-// $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n-// ->name('ai-reports.pdf.download');\n-//\n-// $router->get('/ai-reports/audio/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n-// ->name('ai-reports.audio.view');\n-//\n-// $router->get('/ai-reports/audio/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n-// ->name('ai-reports.audio.download');\n-// }\n-// );\n+ // $router->group(\n+ // ['middleware' => ['can:canAccessAiReports,' . User::class]],\n+ // static function (Router $router): void {\n+ // $router->get('/ai-reports', [FrontendController::class, 'render'])\n+ // ->name('ai.reports.show');\n+ //\n+ // $router->get('/ai-reports/manage', [FrontendController::class, 'render'])\n+ // ->name('ai.reports.manage');\n+ //\n+ // $router->get('/ai-reports/pdf/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n+ // ->name('ai-reports.pdf.view');\n+ //\n+ // $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n+ // ->name('ai-reports.pdf.download');\n+ //\n+ // $router->get('/ai-reports/audio/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n+ // ->name('ai-reports.audio.view');\n+ //\n+ // $router->get('/ai-reports/audio/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n+ // ->name('ai-reports.audio.download');\n+ // }\n+ // );\n \n // Playback of audio streams.\n $router->get('/stream/{track}', [AudioController::class, 'streamTrack'])\n\n ----------- end diff -----------\n\n\nFixed 1 of 5609 files in 38.740 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ git status\nOn branch master\nYour branch is behind 'origin/master' by 53 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Http/Controllers/API/ActivityController.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Team/SyncToIntercom.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/PlaybackService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: routes/web.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 582, done.\nremote: Counting objects: 100% (506/506), done.\nremote: Compressing objects: 100% (80/80), done.\nremote: Total 582 (delta 436), reused 474 (delta 422), pack-reused 76 (from 2)\nReceiving objects: 100% (582/582), 185.10 KiB | 1.13 MiB/s, done.\nResolving deltas: 100% (458/458), completed with 97 local objects.\nFrom github.com:jiminny/app\n a581c3fc69..d207a770d8 master -> origin/master\n * [new branch] JY-19995-delete-leftover-tracks-command -> origin/JY-19995-delete-leftover-tracks-command\n 2ffa898e3a..27d4be4a6d JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages\n * [new branch] JY-20489-hudges-phase2 -> origin/JY-20489-hudges-phase2\n 166c403a12..36292c160d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\n 0ea8d92cd8..b9b830afd5 JY-20541-remove-crm-contract-method -> origin/JY-20541-remove-crm-contract-method\n 60141f6907..242cf1b554 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration\nUpdating b37b0452a5..d207a770d8\nFast-forward\n Makefile | 5 +\n app/Component/Activity/Services/UpdateActivityService.php | 5 +\n app/Component/AiCallScoring/Services/GenerateAiCallScoringService.php | 6 +\n app/Component/AiCallScoring/Services/GetAiCallScoringService.php | 5 +-\n app/Component/AiCallScoring/Transformers/AiCallScoringTransformer.php | 2 +-\n app/Component/ElasticSearch/Model/Observer.php | 4 +-\n app/Console/Commands/Crm/SyncHubspotObjects.php | 84 ++++++++++++++\n app/Console/Commands/Crm/SyncObjects.php | 82 ++++++++------\n app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php | 81 +++++++++++++\n app/Console/Kernel.php | 4 +\n app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 37 +++---\n app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRequest.php | 2 +-\n app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRuleRequest.php | 2 +-\n app/Http/Requests/Settings/AiCallScoring/TestAiCallScoringPromptRequest.php | 2 +-\n app/Jobs/Crm/SyncHubspotObjects.php | 122 ++++++++++++++++++++\n app/Jobs/Crm/SyncObjects.php | 24 ++--\n app/Models/Ai/AiScorecardRuleRun.php | 4 +-\n app/Models/Ai/AiScorecardRun.php | 4 +-\n app/Repositories/Crm/CrmEntityRepository.php | 40 +++++++\n app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 174 +++++++++++++++++++++-------\n app/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTrait.php | 27 ++---\n front-end/src/__mocks__/kit/endpoints/team-insights.js | 1 +\n front-end/src/components/Settings/OrgSettings/AiAutomation/CallScoring/ScorecardRuleForm.vue | 2 +-\n front-end/src/components/TeamInsights/CoachingFrameworks/AICallScoring/aiCallScoringOverTime.ts | 18 ++-\n tests/Unit/Component/Activity/Services/UpdateActivityServiceTest.php | 62 ++++++++++\n tests/Unit/Component/AiCallScoring/Services/GenerateAiCallScoringServiceTest.php | 13 ++-\n tests/Unit/Component/ElasticSearch/Model/ObserverTest.php | 98 ++++++++++++++++\n tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 5 +-\n tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php | 455 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 74 +++++++-----\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTraitTest.php | 8 +-\n 31 files changed, 1272 insertions(+), 180 deletions(-)\n create mode 100644 app/Console/Commands/Crm/SyncHubspotObjects.php\n create mode 100644 app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php\n create mode 100644 app/Jobs/Crm/SyncHubspotObjects.php\n create mode 100644 tests/Unit/Component/ElasticSearch/Model/ObserverTest.php\n create mode 100644 tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 5, done.\nremote: Counting objects: 100% (5/5), done.\nremote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0 (from 0)\nUnpacking objects: 100% (5/5), 488 bytes | 32.00 KiB/s, done.\nFrom github.com:jiminny/app\n d439494641..f044edca5b secfix/npm-20260416 -> origin/secfix/npm-20260416\nAlready up to date.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git fetch\nremote: Enumerating objects: 20, done.\nremote: Counting objects: 100% (20/20), done.\nremote: Compressing objects: 100% (4/4), done.\nremote: Total 14 (delta 10), reused 14 (delta 10), pack-reused 0 (from 0)\nUnpacking objects: 100% (14/14), 1.16 KiB | 84.00 KiB/s, done.\nFrom github.com:jiminny/app\n 36292c160d..46202df90a JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branc -a\ngit: 'branc' is not a git command. See 'git --help'.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branch -a\n 20118-hs-opportunity-make-webhook-strategy-default\n JMNY-4047-hubspot-v3-api-upgrade\n JY-10125-close-copper-setup-crm-command\n JY-10153-talkdesk-import-calls\n JY-10173-add-additional-logs\n JY-10173-add-logs-to-close-crm-log\n JY-10291-setup-twilio-video-command\n JY-10379-import-call-with-crm-data\n JY-10455-fix-sentry-error-on-no-task-matched\n JY-10514-fix-duplicated-prospect-participants\n JY-10698-add-performance-monitor-on-DI\n JY-10742-fix-office-recurring-events\n JY-10797-reorder-prospect-lookup\n JY-10804-social-account-token-sentry-issues\n JY-10877-add-additional-filter-twilio-video\n JY-10877-filter-out-open-rooms-twilio-video\n JY-10925-create-participants-before-processing\n JY-10930-pass-autolog-state-to-activity-data\n JY-10989-add-opportunity-support-on-twilio-video\n JY-11040\n JY-11060-replace-deprecated-methods\n JY-11102-change-retry-time-for-match-crm-data\n JY-11148-remove-rollback-from-change-type-migration\n JY-11148-sentry-quota-issue\n JY-11167-justcall-download-track\n JY-11170-emails-import\n JY-11171-enable-microsoft-dutch-transcription\n JY-11193-customer-api-get-activities-optimisations-poc\n JY-11203-fix-dialpad-issue\n JY-11204-twilio-flex-presales-calls\n JY-11265-clear-crm-data-when-prospect-removed\n JY-11266-remove-ms-id-passcode-workaround\n JY-11325-twilio-video-handle-unsupported-custom-objects\n JY-11340-twilio-flex-direct-integration\n JY-11456-change-hubspot-match-by-phone-number-search\n JY-11465-remove-team-crm-provider-unique-on-crm-object-tables\n JY-11503-aircall-tags-activity-type-mapping-crm\n JY-11594-crm-log-reminder-changes\n JY-11624-fix-postmark-sync\n JY-11669-twilio-video-activity-type\n JY-11720-hubspot-owner-api-change\n JY-11756-JY-12102-delete-past-calendar-events\n JY-11756-remove-activities-foreign-from-calendar-event\n JY-11757-fix-close-crm-find-query-logic\n:","depth":4,"value":"Last login: Mon Apr 20 19:49:44 on ttys010\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 ~ $ lock\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 356, done.\nremote: Counting objects: 100% (288/288), done.\nremote: Compressing objects: 100% (49/49), done.\nremote: Total 356 (delta 247), reused 271 (delta 239), pack-reused 68 (from 1)\nReceiving objects: 100% (356/356), 85.58 KiB | 973.00 KiB/s, done.\nResolving deltas: 100% (267/267), completed with 94 local objects.\nFrom github.com:jiminny/app\n 4eec6ce5d2..b37b0452a5 master -> origin/master\n 752fb7ac1d..724fdb0917 JY-18909-automated-reports-ask-jiminny -> origin/JY-18909-automated-reports-ask-jiminny\n cf378aa07b..a21d53727d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\n + f0119c9d87...b0e5590d49 JY-20701-reschedule-HubSpot-processing -> origin/JY-20701-reschedule-HubSpot-processing (forced update)\n * [new branch] JY-20705-fix-ai-call-scoring-issue -> origin/JY-20705-fix-ai-call-scoring-issue\n * [new branch] JY-20708-elasticsearch-new-activities -> origin/JY-20708-elasticsearch-new-activities\n * [new branch] JY-20709-call-scoring-delete-old -> origin/JY-20709-call-scoring-delete-old\n f4d9b3911b..e6daaf72c3 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration\n 3872fca88d..6352d781ad feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file\nUpdating 4eec6ce5d2..b37b0452a5\nFast-forward\n app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 +++++\n app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++++\n app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++++++++++++++++++++++---\n tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 ++++++++++++++++++++++++++++++++++\n tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-\n 6 files changed, 372 insertions(+), 4 deletions(-)\n create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git status\nOn branch JY-18909-automated-reports-ask-jiminny\nYour branch is behind 'origin/JY-18909-automated-reports-ask-jiminny' by 38 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Http/Controllers/API/ActivityController.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Http/Controllers/API/UserAutomatedReports/UserAutomatedReportsController.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJob.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Team/SyncToIntercom.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Repositories/AutomatedReportsRepository.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/PlaybackService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: routes/web.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: tests/Unit/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJobTest.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: tests/Unit/Repositories/AutomatedReportsRepositoryTest.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Jobs/AutomatedReports/SendReportNotGeneratedMailJob.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Mail/Reports/ReportNotGenerated.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tresources/views/emails/reports/report-not-generated.blade.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ git pull\nremote: Enumerating objects: 527, done.\nremote: Counting objects: 100% (191/191), done.\nremote: Compressing objects: 100% (39/39), done.\nremote: Total 527 (delta 155), reused 152 (delta 152), pack-reused 336 (from 2)\nReceiving objects: 100% (527/527), 178.12 KiB | 996.00 KiB/s, done.\nResolving deltas: 100% (330/330), completed with 51 local objects.\nFrom github.com:jiminny/app\n * [new branch] JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages\n a21d53727d..166c403a12 JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\n f301b758d4..10d290c778 JY-20663-partner-rockeed -> origin/JY-20663-partner-rockeed\n e6daaf72c3..60141f6907 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration\n 6352d781ad..e2859d4d0e feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file\n b37b0452a5..a581c3fc69 master -> origin/master\n * [new branch] transcription-es-update-guard -> origin/transcription-es-update-guard\nUpdating 96e71f9934..724fdb0917\nFast-forward\n app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 ++\n app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++\n app/Console/Commands/Crm/SyncObjects.php | 34 +++++++----\n app/Http/Controllers/Internal/WebhookReceiver/HubspotController.php | 5 +-\n app/Http/Controllers/Webhook/Hubspot/EventsController.php | 6 +-\n app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 75 ++++++++++++++++++++----\n app/Jobs/Crm/SyncObjects.php | 38 +++++++-----\n app/Jobs/Crm/SyncOpportunitiesJob.php | 12 +++-\n app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++-\n app/Services/Crm/BaseService.php | 53 ++++++++++++++---\n app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 17 ++++--\n composer.lock | 46 +++++++--------\n front-end/src/components/connect/connect.vue | 30 +++++-----\n front-end/src/components/onboard/Onboard.vue | 2 +-\n tests/Feature/Services/Crm/BaseServiceTest.php | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 ++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 +++++++++++\n tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Jobs/Crm/SyncObjectsTest.php | 113 ++++++++++++++++++-----------------\n tests/Unit/Jobs/Crm/SyncOpportunitiesJobTest.php | 30 +++++-----\n tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++-\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 2 +-\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n 23 files changed, 1319 insertions(+), 174 deletions(-)\n create mode 100644 tests/Feature/Services/Crm/BaseServiceTest.php\n create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php\n create mode 100644 tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php\n create mode 100644 tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 32.620 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 37.187 seconds, 67.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-emails:worker-emails_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker-audio:worker-audio_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-es-update:worker-es-update_00: stopped\nworker-conferences:worker-conferences_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 36.627 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5609 files in 54.393 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) routes/web.php (statement_indentation)\n ---------- begin diff ----------\n--- /home/jiminny/routes/web.php\n+++ /home/jiminny/routes/web.php\n@@ -148,57 +148,57 @@\n $router->get('/playback/{activity}', [PlaybackController::class, 'show'])\n ->name('activity.playback');\n \n- // AI Reports\n- $router->get('/ai-reports', [\n- FrontendController::class, 'render',\n- ])\n- ->middleware(['can:canAccessAiReports,' . User::class])\n- ->name('ai.reports.show');\n+ // AI Reports\n+ $router->get('/ai-reports', [\n+ FrontendController::class, 'render',\n+ ])\n+ ->middleware(['can:canAccessAiReports,' . User::class])\n+ ->name('ai.reports.show');\n \n- $router->get('/ai-reports/manage', [\n- FrontendController::class, 'render',\n- ])\n- ->middleware(['can:canAccessAiReports,' . User::class])\n- ->name('ai.reports.manage');\n+ $router->get('/ai-reports/manage', [\n+ FrontendController::class, 'render',\n+ ])\n+ ->middleware(['can:canAccessAiReports,' . User::class])\n+ ->name('ai.reports.manage');\n \n- $router->get('/ai-reports/pdf/{uuid}', [\n- Controllers\\UserAutomatedReportsController::class, 'view',\n- ])->name('ai-reports.pdf.view');\n+ $router->get('/ai-reports/pdf/{uuid}', [\n+ Controllers\\UserAutomatedReportsController::class, 'view',\n+ ])->name('ai-reports.pdf.view');\n \n- $router->get('/ai-reports/pdf/{uuid}/download', [\n- Controllers\\UserAutomatedReportsController::class, 'download',\n- ])->name('ai-reports.pdf.download');\n+ $router->get('/ai-reports/pdf/{uuid}/download', [\n+ Controllers\\UserAutomatedReportsController::class, 'download',\n+ ])->name('ai-reports.pdf.download');\n \n- $router->get('/ai-reports/audio/{uuid}', [\n- Controllers\\UserAutomatedReportsController::class, 'view',\n- ])->name('ai-reports.audio.view');\n+ $router->get('/ai-reports/audio/{uuid}', [\n+ Controllers\\UserAutomatedReportsController::class, 'view',\n+ ])->name('ai-reports.audio.view');\n \n- $router->get('/ai-reports/audio/{uuid}/download', [\n- Controllers\\UserAutomatedReportsController::class, 'download',\n- ])->name('ai-reports.audio.download');\n+ $router->get('/ai-reports/audio/{uuid}/download', [\n+ Controllers\\UserAutomatedReportsController::class, 'download',\n+ ])->name('ai-reports.audio.download');\n \n-// $router->group(\n-// ['middleware' => ['can:canAccessAiReports,' . User::class]],\n-// static function (Router $router): void {\n-// $router->get('/ai-reports', [FrontendController::class, 'render'])\n-// ->name('ai.reports.show');\n-//\n-// $router->get('/ai-reports/manage', [FrontendController::class, 'render'])\n-// ->name('ai.reports.manage');\n-//\n-// $router->get('/ai-reports/pdf/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n-// ->name('ai-reports.pdf.view');\n-//\n-// $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n-// ->name('ai-reports.pdf.download');\n-//\n-// $router->get('/ai-reports/audio/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n-// ->name('ai-reports.audio.view');\n-//\n-// $router->get('/ai-reports/audio/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n-// ->name('ai-reports.audio.download');\n-// }\n-// );\n+ // $router->group(\n+ // ['middleware' => ['can:canAccessAiReports,' . User::class]],\n+ // static function (Router $router): void {\n+ // $router->get('/ai-reports', [FrontendController::class, 'render'])\n+ // ->name('ai.reports.show');\n+ //\n+ // $router->get('/ai-reports/manage', [FrontendController::class, 'render'])\n+ // ->name('ai.reports.manage');\n+ //\n+ // $router->get('/ai-reports/pdf/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n+ // ->name('ai-reports.pdf.view');\n+ //\n+ // $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n+ // ->name('ai-reports.pdf.download');\n+ //\n+ // $router->get('/ai-reports/audio/{uuid}', [Controllers\\UserAutomatedReportsController::class, 'view'])\n+ // ->name('ai-reports.audio.view');\n+ //\n+ // $router->get('/ai-reports/audio/{uuid}/download', [Controllers\\UserAutomatedReportsController::class, 'download'])\n+ // ->name('ai-reports.audio.download');\n+ // }\n+ // );\n \n // Playback of audio streams.\n $router->get('/stream/{track}', [AudioController::class, 'streamTrack'])\n\n ----------- end diff -----------\n\n\nFixed 1 of 5609 files in 38.740 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ git status\nOn branch master\nYour branch is behind 'origin/master' by 53 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Http/Controllers/API/ActivityController.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Jobs/Team/SyncToIntercom.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Services/PlaybackService.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: routes/web.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 582, done.\nremote: Counting objects: 100% (506/506), done.\nremote: Compressing objects: 100% (80/80), done.\nremote: Total 582 (delta 436), reused 474 (delta 422), pack-reused 76 (from 2)\nReceiving objects: 100% (582/582), 185.10 KiB | 1.13 MiB/s, done.\nResolving deltas: 100% (458/458), completed with 97 local objects.\nFrom github.com:jiminny/app\n a581c3fc69..d207a770d8 master -> origin/master\n * [new branch] JY-19995-delete-leftover-tracks-command -> origin/JY-19995-delete-leftover-tracks-command\n 2ffa898e3a..27d4be4a6d JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages\n * [new branch] JY-20489-hudges-phase2 -> origin/JY-20489-hudges-phase2\n 166c403a12..36292c160d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\n 0ea8d92cd8..b9b830afd5 JY-20541-remove-crm-contract-method -> origin/JY-20541-remove-crm-contract-method\n 60141f6907..242cf1b554 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration\nUpdating b37b0452a5..d207a770d8\nFast-forward\n Makefile | 5 +\n app/Component/Activity/Services/UpdateActivityService.php | 5 +\n app/Component/AiCallScoring/Services/GenerateAiCallScoringService.php | 6 +\n app/Component/AiCallScoring/Services/GetAiCallScoringService.php | 5 +-\n app/Component/AiCallScoring/Transformers/AiCallScoringTransformer.php | 2 +-\n app/Component/ElasticSearch/Model/Observer.php | 4 +-\n app/Console/Commands/Crm/SyncHubspotObjects.php | 84 ++++++++++++++\n app/Console/Commands/Crm/SyncObjects.php | 82 ++++++++------\n app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php | 81 +++++++++++++\n app/Console/Kernel.php | 4 +\n app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 37 +++---\n app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRequest.php | 2 +-\n app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRuleRequest.php | 2 +-\n app/Http/Requests/Settings/AiCallScoring/TestAiCallScoringPromptRequest.php | 2 +-\n app/Jobs/Crm/SyncHubspotObjects.php | 122 ++++++++++++++++++++\n app/Jobs/Crm/SyncObjects.php | 24 ++--\n app/Models/Ai/AiScorecardRuleRun.php | 4 +-\n app/Models/Ai/AiScorecardRun.php | 4 +-\n app/Repositories/Crm/CrmEntityRepository.php | 40 +++++++\n app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 174 +++++++++++++++++++++-------\n app/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTrait.php | 27 ++---\n front-end/src/__mocks__/kit/endpoints/team-insights.js | 1 +\n front-end/src/components/Settings/OrgSettings/AiAutomation/CallScoring/ScorecardRuleForm.vue | 2 +-\n front-end/src/components/TeamInsights/CoachingFrameworks/AICallScoring/aiCallScoringOverTime.ts | 18 ++-\n tests/Unit/Component/Activity/Services/UpdateActivityServiceTest.php | 62 ++++++++++\n tests/Unit/Component/AiCallScoring/Services/GenerateAiCallScoringServiceTest.php | 13 ++-\n tests/Unit/Component/ElasticSearch/Model/ObserverTest.php | 98 ++++++++++++++++\n tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 5 +-\n tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php | 455 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 74 +++++++-----\n tests/Unit/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTraitTest.php | 8 +-\n 31 files changed, 1272 insertions(+), 180 deletions(-)\n create mode 100644 app/Console/Commands/Crm/SyncHubspotObjects.php\n create mode 100644 app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php\n create mode 100644 app/Jobs/Crm/SyncHubspotObjects.php\n create mode 100644 tests/Unit/Component/ElasticSearch/Model/ObserverTest.php\n create mode 100644 tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull\nremote: Enumerating objects: 5, done.\nremote: Counting objects: 100% (5/5), done.\nremote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0 (from 0)\nUnpacking objects: 100% (5/5), 488 bytes | 32.00 KiB/s, done.\nFrom github.com:jiminny/app\n d439494641..f044edca5b secfix/npm-20260416 -> origin/secfix/npm-20260416\nAlready up to date.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git fetch\nremote: Enumerating objects: 20, done.\nremote: Counting objects: 100% (20/20), done.\nremote: Compressing objects: 100% (4/4), done.\nremote: Total 14 (delta 10), reused 14 (delta 10), pack-reused 0 (from 0)\nUnpacking objects: 100% (14/14), 1.16 KiB | 84.00 KiB/s, done.\nFrom github.com:jiminny/app\n 36292c160d..46202df90a JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branc -a\ngit: 'branc' is not a git command. See 'git --help'.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branch -a\n 20118-hs-opportunity-make-webhook-strategy-default\n JMNY-4047-hubspot-v3-api-upgrade\n JY-10125-close-copper-setup-crm-command\n JY-10153-talkdesk-import-calls\n JY-10173-add-additional-logs\n JY-10173-add-logs-to-close-crm-log\n JY-10291-setup-twilio-video-command\n JY-10379-import-call-with-crm-data\n JY-10455-fix-sentry-error-on-no-task-matched\n JY-10514-fix-duplicated-prospect-participants\n JY-10698-add-performance-monitor-on-DI\n JY-10742-fix-office-recurring-events\n JY-10797-reorder-prospect-lookup\n JY-10804-social-account-token-sentry-issues\n JY-10877-add-additional-filter-twilio-video\n JY-10877-filter-out-open-rooms-twilio-video\n JY-10925-create-participants-before-processing\n JY-10930-pass-autolog-state-to-activity-data\n JY-10989-add-opportunity-support-on-twilio-video\n JY-11040\n JY-11060-replace-deprecated-methods\n JY-11102-change-retry-time-for-match-crm-data\n JY-11148-remove-rollback-from-change-type-migration\n JY-11148-sentry-quota-issue\n JY-11167-justcall-download-track\n JY-11170-emails-import\n JY-11171-enable-microsoft-dutch-transcription\n JY-11193-customer-api-get-activities-optimisations-poc\n JY-11203-fix-dialpad-issue\n JY-11204-twilio-flex-presales-calls\n JY-11265-clear-crm-data-when-prospect-removed\n JY-11266-remove-ms-id-passcode-workaround\n JY-11325-twilio-video-handle-unsupported-custom-objects\n JY-11340-twilio-flex-direct-integration\n JY-11456-change-hubspot-match-by-phone-number-search\n JY-11465-remove-team-crm-provider-unique-on-crm-object-tables\n JY-11503-aircall-tags-activity-type-mapping-crm\n JY-11594-crm-log-reminder-changes\n JY-11624-fix-postmark-sync\n JY-11669-twilio-video-activity-type\n JY-11720-hubspot-owner-api-change\n JY-11756-JY-12102-delete-past-calendar-events\n JY-11756-remove-activities-foreign-from-calendar-event\n JY-11757-fix-close-crm-find-query-logic\n:","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"less","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Build full day activity summary from Screenpipe (claude)","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-186:~ (-zsh)","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"less","depth":1,"bounds":{"left":0.48958334,"top":0.033333335,"width":0.020833334,"height":0.017777778},"role_description":"text"}]...
|
-1168320697323537382
|
-1076393109163054121
|
visual_change
|
accessibility
|
NULL
|
Last login: Mon Apr 20 19:49:44 on ttys010
Poetry Last login: Mon Apr 20 19:49:44 on ttys010
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 ~ $ lock
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 356, done.
remote: Counting objects: 100% (288/288), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 356 (delta 247), reused 271 (delta 239), pack-reused 68 (from 1)
Receiving objects: 100% (356/356), 85.58 KiB | 973.00 KiB/s, done.
Resolving deltas: 100% (267/267), completed with 94 local objects.
From github.com:jiminny/app
4eec6ce5d2..b37b0452a5 master -> origin/master
752fb7ac1d..724fdb0917 JY-18909-automated-reports-ask-jiminny -> origin/JY-18909-automated-reports-ask-jiminny
cf378aa07b..a21d53727d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
+ f0119c9d87...b0e5590d49 JY-20701-reschedule-HubSpot-processing -> origin/JY-20701-reschedule-HubSpot-processing (forced update)
* [new branch] JY-20705-fix-ai-call-scoring-issue -> origin/JY-20705-fix-ai-call-scoring-issue
* [new branch] JY-20708-elasticsearch-new-activities -> origin/JY-20708-elasticsearch-new-activities
* [new branch] JY-20709-call-scoring-delete-old -> origin/JY-20709-call-scoring-delete-old
f4d9b3911b..e6daaf72c3 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration
3872fca88d..6352d781ad feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file
Updating 4eec6ce5d2..b37b0452a5
Fast-forward
app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 +++++
app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++++
app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++++++++++++++++++++++---
tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 ++++++++++++++++++++++++++++++++++
tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
6 files changed, 372 insertions(+), 4 deletions(-)
create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git status
On branch JY-18909-automated-reports-ask-jiminny
Your branch is behind 'origin/JY-18909-automated-reports-ask-jiminny' by 38 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: app/Http/Controllers/API/ActivityController.php
modified: app/Http/Controllers/API/UserAutomatedReports/UserAutomatedReportsController.php
modified: app/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJob.php
modified: app/Jobs/Team/SyncToIntercom.php
modified: app/Repositories/AutomatedReportsRepository.php
modified: app/Services/PlaybackService.php
modified: config/logging.php
modified: routes/web.php
modified: tests/Unit/Jobs/AutomatedReports/RequestGenerateAskJiminnyReportJobTest.php
modified: tests/Unit/Repositories/AutomatedReportsRepositoryTest.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
app/Jobs/AutomatedReports/SendReportNotGeneratedMailJob.php
app/Mail/Reports/ReportNotGenerated.php
ids.txt
raw_sql_query.sql
resources/views/emails/reports/report-not-generated.blade.php
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ git pull
remote: Enumerating objects: 527, done.
remote: Counting objects: 100% (191/191), done.
remote: Compressing objects: 100% (39/39), done.
remote: Total 527 (delta 155), reused 152 (delta 152), pack-reused 336 (from 2)
Receiving objects: 100% (527/527), 178.12 KiB | 996.00 KiB/s, done.
Resolving deltas: 100% (330/330), completed with 51 local objects.
From github.com:jiminny/app
* [new branch] JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages
a21d53727d..166c403a12 JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
f301b758d4..10d290c778 JY-20663-partner-rockeed -> origin/JY-20663-partner-rockeed
e6daaf72c3..60141f6907 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration
6352d781ad..e2859d4d0e feature/add-planet-start-stop-to-make-file -> origin/feature/add-planet-start-stop-to-make-file
b37b0452a5..a581c3fc69 master -> origin/master
* [new branch] transcription-es-update-guard -> origin/transcription-es-update-guard
Updating 96e71f9934..724fdb0917
Fast-forward
app/Component/ActivityAnalytics/Service/ActivityStatsBuilder.php | 5 ++
app/Component/ParagraphBreaker/Services/TranscriptionParagraphsService.php | 4 ++
app/Console/Commands/Crm/SyncObjects.php | 34 +++++++----
app/Http/Controllers/Internal/WebhookReceiver/HubspotController.php | 5 +-
app/Http/Controllers/Webhook/Hubspot/EventsController.php | 6 +-
app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 75 ++++++++++++++++++++----
app/Jobs/Crm/SyncObjects.php | 38 +++++++-----
app/Jobs/Crm/SyncOpportunitiesJob.php | 12 +++-
app/Listeners/Crm/ImportActivityTypes.php | 33 ++++++++++-
app/Services/Crm/BaseService.php | 53 ++++++++++++++---
app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 17 ++++--
composer.lock | 46 +++++++--------
front-end/src/components/connect/connect.vue | 30 +++++-----
front-end/src/components/onboard/Onboard.vue | 2 +-
tests/Feature/Services/Crm/BaseServiceTest.php | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php | 129 ++++++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ParagraphBreaker/Services/TranscriptionParagraphServiceTest.php | 34 +++++++++++
tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Jobs/Crm/SyncObjectsTest.php | 113 ++++++++++++++++++-----------------
tests/Unit/Jobs/Crm/SyncOpportunitiesJobTest.php | 30 +++++-----
tests/Unit/Listeners/Crm/ImportActivityTypesTest.php | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 2 +-
tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php | 249 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
23 files changed, 1319 insertions(+), 174 deletions(-)
create mode 100644 tests/Feature/Services/Crm/BaseServiceTest.php
create mode 100644 tests/Unit/Component/ActivityAnalytics/Service/ActivityStatsBuilderTest.php
create mode 100644 tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php
create mode 100644 tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTraitSyncOpportunitiesTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5609 files in 32.620 seconds, 67.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5609 files in 36.627 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5609/5609 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
1) routes/web.php (statement_indentation)
---------- begin diff ----------
--- /home/jiminny/routes/web.php
+++ /home/jiminny/routes/web.php
@@ -148,57 +148,57 @@
$router->get('/playback/{activity}', [PlaybackController::class, 'show'])
->name('activity.playback');
- // AI Reports
- $router->get('/ai-reports', [
- FrontendController::class, 'render',
- ])
- ->middleware(['can:canAccessAiReports,' . User::class])
- ->name('ai.reports.show');
+ // AI Reports
+ $router->get('/ai-reports', [
+ FrontendController::class, 'render',
+ ])
+ ->middleware(['can:canAccessAiReports,' . User::class])
+ ->name('ai.reports.show');
- $router->get('/ai-reports/manage', [
- FrontendController::class, 'render',
- ])
- ->middleware(['can:canAccessAiReports,' . User::class])
- ->name('ai.reports.manage');
+ $router->get('/ai-reports/manage', [
+ FrontendController::class, 'render',
+ ])
+ ->middleware(['can:canAccessAiReports,' . User::class])
+ ->name('ai.reports.manage');
- $router->get('/ai-reports/pdf/{uuid}', [
- Controllers\UserAutomatedReportsController::class, 'view',
- ])->name('ai-reports.pdf.view');
+ $router->get('/ai-reports/pdf/{uuid}', [
+ Controllers\UserAutomatedReportsController::class, 'view',
+ ])->name('ai-reports.pdf.view');
- $router->get('/ai-reports/pdf/{uuid}/download', [
- Controllers\UserAutomatedReportsController::class, 'download',
- ])->name('ai-reports.pdf.download');
+ $router->get('/ai-reports/pdf/{uuid}/download', [
+ Controllers\UserAutomatedReportsController::class, 'download',
+ ])->name('ai-reports.pdf.download');
- $router->get('/ai-reports/audio/{uuid}', [
- Controllers\UserAutomatedReportsController::class, 'view',
- ])->name('ai-reports.audio.view');
+ $router->get('/ai-reports/audio/{uuid}', [
+ Controllers\UserAutomatedReportsController::class, 'view',
+ ])->name('ai-reports.audio.view');
- $router->get('/ai-reports/audio/{uuid}/download', [
- Controllers\UserAutomatedReportsController::class, 'download',
- ])->name('ai-reports.audio.download');
+ $router->get('/ai-reports/audio/{uuid}/download', [
+ Controllers\UserAutomatedReportsController::class, 'download',
+ ])->name('ai-reports.audio.download');
-// $router->group(
-// ['middleware' => ['can:canAccessAiReports,' . User::class]],
-// static function (Router $router): void {
-// $router->get('/ai-reports', [FrontendController::class, 'render'])
-// ->name('ai.reports.show');
-//
-// $router->get('/ai-reports/manage', [FrontendController::class, 'render'])
-// ->name('ai.reports.manage');
-//
-// $router->get('/ai-reports/pdf/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
-// ->name('ai-reports.pdf.view');
-//
-// $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
-// ->name('ai-reports.pdf.download');
-//
-// $router->get('/ai-reports/audio/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
-// ->name('ai-reports.audio.view');
-//
-// $router->get('/ai-reports/audio/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
-// ->name('ai-reports.audio.download');
-// }
-// );
+ // $router->group(
+ // ['middleware' => ['can:canAccessAiReports,' . User::class]],
+ // static function (Router $router): void {
+ // $router->get('/ai-reports', [FrontendController::class, 'render'])
+ // ->name('ai.reports.show');
+ //
+ // $router->get('/ai-reports/manage', [FrontendController::class, 'render'])
+ // ->name('ai.reports.manage');
+ //
+ // $router->get('/ai-reports/pdf/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
+ // ->name('ai-reports.pdf.view');
+ //
+ // $router->get('/ai-reports/pdf/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
+ // ->name('ai-reports.pdf.download');
+ //
+ // $router->get('/ai-reports/audio/{uuid}', [Controllers\UserAutomatedReportsController::class, 'view'])
+ // ->name('ai-reports.audio.view');
+ //
+ // $router->get('/ai-reports/audio/{uuid}/download', [Controllers\UserAutomatedReportsController::class, 'download'])
+ // ->name('ai-reports.audio.download');
+ // }
+ // );
// Playback of audio streams.
$router->get('/stream/{track}', [AudioController::class, 'streamTrack'])
----------- end diff -----------
Fixed 1 of 5609 files in 38.740 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 582, done.
remote: Counting objects: 100% (506/506), done.
remote: Compressing objects: 100% (80/80), done.
remote: Total 582 (delta 436), reused 474 (delta 422), pack-reused 76 (from 2)
Receiving objects: 100% (582/582), 185.10 KiB | 1.13 MiB/s, done.
Resolving deltas: 100% (458/458), completed with 97 local objects.
From github.com:jiminny/app
a581c3fc69..d207a770d8 master -> origin/master
* [new branch] JY-19995-delete-leftover-tracks-command -> origin/JY-19995-delete-leftover-tracks-command
2ffa898e3a..27d4be4a6d JY-20372-ai-reports-promotion-pages -> origin/JY-20372-ai-reports-promotion-pages
* [new branch] JY-20489-hudges-phase2 -> origin/JY-20489-hudges-phase2
166c403a12..36292c160d JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
0ea8d92cd8..b9b830afd5 JY-20541-remove-crm-contract-method -> origin/JY-20541-remove-crm-contract-method
60141f6907..242cf1b554 JY-9712-change-forever-nudges-to-1-year-expiration -> origin/JY-9712-change-forever-nudges-to-1-year-expiration
Updating b37b0452a5..d207a770d8
Fast-forward
Makefile | 5 +
app/Component/Activity/Services/UpdateActivityService.php | 5 +
app/Component/AiCallScoring/Services/GenerateAiCallScoringService.php | 6 +
app/Component/AiCallScoring/Services/GetAiCallScoringService.php | 5 +-
app/Component/AiCallScoring/Transformers/AiCallScoringTransformer.php | 2 +-
app/Component/ElasticSearch/Model/Observer.php | 4 +-
app/Console/Commands/Crm/SyncHubspotObjects.php | 84 ++++++++++++++
app/Console/Commands/Crm/SyncObjects.php | 82 ++++++++------
app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php | 81 +++++++++++++
app/Console/Kernel.php | 4 +
app/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTrait.php | 37 +++---
app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRequest.php | 2 +-
app/Http/Requests/Settings/AiCallScoring/CreateOrUpdateAiScorecardRuleRequest.php | 2 +-
app/Http/Requests/Settings/AiCallScoring/TestAiCallScoringPromptRequest.php | 2 +-
app/Jobs/Crm/SyncHubspotObjects.php | 122 ++++++++++++++++++++
app/Jobs/Crm/SyncObjects.php | 24 ++--
app/Models/Ai/AiScorecardRuleRun.php | 4 +-
app/Models/Ai/AiScorecardRun.php | 4 +-
app/Repositories/Crm/CrmEntityRepository.php | 40 +++++++
app/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTrait.php | 174 +++++++++++++++++++++-------
app/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTrait.php | 27 ++---
front-end/src/__mocks__/kit/endpoints/team-insights.js | 1 +
front-end/src/components/Settings/OrgSettings/AiAutomation/CallScoring/ScorecardRuleForm.vue | 2 +-
front-end/src/components/TeamInsights/CoachingFrameworks/AICallScoring/aiCallScoringOverTime.ts | 18 ++-
tests/Unit/Component/Activity/Services/UpdateActivityServiceTest.php | 62 ++++++++++
tests/Unit/Component/AiCallScoring/Services/GenerateAiCallScoringServiceTest.php | 13 ++-
tests/Unit/Component/ElasticSearch/Model/ObserverTest.php | 98 ++++++++++++++++
tests/Unit/Http/Controllers/Webhook/Hubspot/ProcessesWebhooksTraitTest.php | 5 +-
tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php | 455 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ServiceTraits/OpportunitySyncTest.php | 74 +++++++-----
tests/Unit/Services/Crm/Hubspot/ServiceTraits/SyncCrmEntitiesTraitTest.php | 8 +-
31 files changed, 1272 insertions(+), 180 deletions(-)
create mode 100644 app/Console/Commands/Crm/SyncHubspotObjects.php
create mode 100644 app/Console/Commands/Crm/Traits/SyncObjectsCommandTrait.php
create mode 100644 app/Jobs/Crm/SyncHubspotObjects.php
create mode 100644 tests/Unit/Component/ElasticSearch/Model/ObserverTest.php
create mode 100644 tests/Unit/Jobs/Crm/SyncHubspotObjectsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0 (from 0)
Unpacking objects: 100% (5/5), 488 bytes | 32.00 KiB/s, done.
From github.com:jiminny/app
d439494641..f044edca5b secfix/npm-20260416 -> origin/secfix/npm-20260416
Already up to date.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git fetch
remote: Enumerating objects: 20, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 14 (delta 10), reused 14 (delta 10), pack-reused 0 (from 0)
Unpacking objects: 100% (14/14), 1.16 KiB | 84.00 KiB/s, done.
From github.com:jiminny/app
36292c160d..46202df90a JY-20541-cleanup-stale-tasks-and-events -> origin/JY-20541-cleanup-stale-tasks-and-events
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branc -a
git: 'branc' is not a git command. See 'git --help'.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ git branch -a
20118-hs-opportunity-make-webhook-strategy-default
JMNY-4047-hubspot-v3-api-upgrade
JY-10125-close-copper-setup-crm-command
JY-10153-talkdesk-import-calls
JY-10173-add-additional-logs
JY-10173-add-logs-to-close-crm-log
JY-10291-setup-twilio-video-command
JY-10379-import-call-with-crm-data
JY-10455-fix-sentry-error-on-no-task-matched
JY-10514-fix-duplicated-prospect-participants
JY-10698-add-performance-monitor-on-DI
JY-10742-fix-office-recurring-events
JY-10797-reorder-prospect-lookup
JY-10804-social-account-token-sentry-issues
JY-10877-add-additional-filter-twilio-video
JY-10877-filter-out-open-rooms-twilio-video
JY-10925-create-participants-before-processing
JY-10930-pass-autolog-state-to-activity-data
JY-10989-add-opportunity-support-on-twilio-video
JY-11040
JY-11060-replace-deprecated-methods
JY-11102-change-retry-time-for-match-crm-data
JY-11148-remove-rollback-from-change-type-migration
JY-11148-sentry-quota-issue
JY-11167-justcall-download-track
JY-11170-emails-import
JY-11171-enable-microsoft-dutch-transcription
JY-11193-customer-[API_KEY]
JY-11203-fix-dialpad-issue
JY-11204-twilio-flex-presales-calls
JY-11265-clear-crm-data-when-prospect-removed
JY-11266-remove-ms-id-passcode-workaround
JY-11325-twilio-video-handle-unsupported-custom-objects
JY-11340-twilio-flex-direct-integration
JY-11456-change-hubspot-match-by-phone-number-search
JY-11465-remove-team-crm-provider-unique-on-crm-object-tables
JY-11503-aircall-tags-activity-type-mapping-crm
JY-11594-crm-log-reminder-changes
JY-11624-fix-postmark-sync
JY-11669-twilio-video-activity-type
JY-11720-hubspot-owner-api-change
JY-11756-JY-12102-delete-past-calendar-events
JY-11756-remove-activities-foreign-from-calendar-event
JY-11757-fix-close-crm-find-query-logic
:
DOCKER
Close Tab
-zsh
Close Tab
less
Close Tab
✳ Build full day activity summary from Screenpipe (claude)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
APP (-zsh)
Close Tab
ec2-user@ip-10-30-159-186:~ (-zsh)
Close Tab
⌥⌘1
less...
|
NULL
|
|
79851
|
2082
|
6
|
2026-04-24T17:16:39.554562+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050999554_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7299925530597344637
|
6410053016026106671
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings...
|
NULL
|
|
79850
|
2081
|
6
|
2026-04-24T17:16:37.659438+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050997659_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
41 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"41 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"41 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"41 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"41 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"41 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4841479792574391271
|
6401223383652523913
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
41 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
41 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79848
|
|
79822
|
2080
|
20
|
2026-04-24T17:12:09.763189+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050729763_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Close tab
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.46209097,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3931720488644394889
|
6401223383652521865
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Close tab
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79820
|
|
79821
|
2079
|
12
|
2026-04-24T17:12:09.132199+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050729132_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-6711485422941872587
|
6401223383585415049
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics...
|
NULL
|
|
79820
|
2080
|
19
|
2026-04-24T17:12:08.149529+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050728149_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
1976051674119031319
|
6401223383652521865
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
NULL
|
|
79819
|
2079
|
11
|
2026-04-24T17:12:08.073837+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050728073_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
1976051674119031319
|
6401223383652521865
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79816
|
|
79818
|
2080
|
18
|
2026-04-24T17:12:06.750476+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050726750_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close ChatGPT (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close ChatGPT (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5478133607093606798
|
6401223383652521933
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close ChatGPT (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79817
|
|
79817
|
2080
|
17
|
2026-04-24T17:12:06.108282+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050726108_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close ChatGPT (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close ChatGPT (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8389448916925027734
|
6401223383585447817
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close ChatGPT (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages...
|
NULL
|
|
79816
|
2079
|
10
|
2026-04-24T17:12:06.129299+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050726129_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close ChatGPT (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close ChatGPT (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5478133607093606798
|
6401223383652521933
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close ChatGPT (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
NULL
|
|
79815
|
2080
|
16
|
2026-04-24T17:12:04.646827+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050724646_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79814
|
|
79814
|
2080
|
15
|
2026-04-24T17:12:03.645584+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050723645_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-1552482631493371720
|
6401223381505040265
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea...
|
NULL
|
|
79813
|
2080
|
14
|
2026-04-24T17:12:02.525019+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050722525_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79811
|
|
79812
|
2079
|
9
|
2026-04-24T17:12:02.440229+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050722440_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"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},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79809
|
|
79811
|
2080
|
13
|
2026-04-24T17:12:00.366130+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050720366_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API
Open Google Gemini (⌃X)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.3480718,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.36835107,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.3726729,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.39228722,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.39660904,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.43168217,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.43600398,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.46509308,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.4694149,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.9388298,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.47024602,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.47024602,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.48969415,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.49268618,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.49268618,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.5287567,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.75797874,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.77543217,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.80917555,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.81150264,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.81831783,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.84258646,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.84491354,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.8640292,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.8774933,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.87982047,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.45960772,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.47057846,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.48636967,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.4971742,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.515625,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5265958,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.561004,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.57197475,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.5929189,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.60388964,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.6263298,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.63730055,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.66140294,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.67237365,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.686004,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.69697475,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.85139626,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.86236703,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.45994017,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.50748,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5109708,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.5688165,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.6171875,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.62051195,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.6775266,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7280585,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.7322141,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.4710771,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.49750665,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.64960104,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.7524933,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.764129,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.4722407,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.5049867,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5069814,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.53740025,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.53740025,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.6810173,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.75,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.4709109,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.4709109,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.4709109,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.4709109,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.4709109,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.4709109,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.4709109,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.4709109,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.79205453,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.8741689,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.79205453,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.79205453,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.79205453,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.7997008,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.8081782,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.79205453,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.80019945,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.8146609,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.8390958,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.8562167,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.80019945,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.8125,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.83361036,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.857879,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.35139626,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.35139626,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.95262635,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.95761305,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.9812167,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98620343,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open Google Gemini (⌃X)","depth":2,"bounds":{"left":0.25631648,"top":0.952514,"width":0.045545213,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6400996614853768364
|
6401223383652521933
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API
Open Google Gemini (⌃X)...
|
NULL
|
|
79810
|
2080
|
12
|
2026-04-24T17:11:58.421587+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050718421_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.3480718,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.36835107,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.3726729,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.39228722,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.39660904,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.43168217,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.43600398,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.46509308,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.4694149,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.9388298,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.47024602,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.47024602,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.48969415,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.49268618,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.49268618,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.5287567,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.75797874,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.77543217,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.80917555,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.81150264,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.81831783,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.84258646,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.84491354,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.8640292,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.8774933,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.87982047,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.45960772,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.47057846,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.48636967,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.4971742,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.515625,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5265958,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.561004,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.57197475,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.5929189,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.60388964,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.6263298,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.63730055,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.66140294,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.67237365,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.686004,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.69697475,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.85139626,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.86236703,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.45994017,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.50748,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5109708,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.5688165,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.6171875,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.62051195,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.6775266,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7280585,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.7322141,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.4710771,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.49750665,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.64960104,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.7524933,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.764129,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.4722407,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.5049867,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5069814,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.53740025,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.53740025,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.6810173,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.75,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.4709109,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.4709109,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.4709109,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.4709109,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.4709109,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.4709109,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.4709109,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.4709109,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.57795876,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.57795876,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.75,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.79205453,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.8741689,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.79205453,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.79205453,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.79205453,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.7997008,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.8081782,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.79205453,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.80019945,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.8146609,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.8390958,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.8562167,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.80019945,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.8125,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.83361036,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.857879,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.35139626,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.35139626,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.95262635,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.95761305,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.9812167,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98620343,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6119122214826871368
|
6410230582907262925
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79808
|
|
79809
|
2079
|
8
|
2026-04-24T17:11:58.421663+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050718421_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.16944444,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.16944444,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6119122214826871368
|
6410230582907262925
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
NULL
|
|
79808
|
2080
|
11
|
2026-04-24T17:11:54.304563+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050714304_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
NULL
|
|
79807
|
2080
|
10
|
2026-04-24T17:11:53.691414+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050713691_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2356273148225126609
|
6401223383585415049
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%...
|
79806
|
|
79806
|
2080
|
9
|
2026-04-24T17:11:50.675615+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050710675_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3069117246014020304
|
6401082644016682893
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh...
|
NULL
|
|
79805
|
2079
|
7
|
2026-04-24T17:11:50.675608+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050710675_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"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},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79802
|
|
79804
|
2080
|
8
|
2026-04-24T17:11:47.828342+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050707828_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79803
|
|
79803
|
2080
|
7
|
2026-04-24T17:11:46.356225+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050706356_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-1082535405972275214
|
-1082535405972275214
|
click
|
hybrid
|
NULL
|
DXP4800PLUS-B5F8
rireroxcalVIewMistorbookmarksProt DXP4800PLUS-B5F8
rireroxcalVIewMistorbookmarksProtllesloolsWindowmelpдeSCREENPIPE ISSH• NASI> #recycle> app>datapipes• gitignore() app_settings.json=archive.dbE db.salitesscreenpipe_sync.sh= screenpipe.dbE db.sqlite-shmWelcome backp! Western Digital Red Plus 3.5 6TB 5400rpm 256MB SAA Today's Deal:architecture - screenpipe docsClaude code works better when you stop treating it lik@ Screenpipe — Archive(*SQLite Web: archive.db©SQLite Web: db.sqlite* Claude PlatformHey @louis030195 Ill check during my - screenpipe.ccGitHub - screenpipe/screenpipe: Run agents that workX Gong Pricing in 2026: Costs, Plans & Is It Worth It?GLM 5.1 Thinks Strategically, Data-Center Revolt IntenJ Gitea Official Website∞ lakylak/screenpipe - screenpipe - Gitea: Git with a XL New TahPROBLEMSOUTPuTDEBUG CONSOLFAdm1nAnyDARQOPI UIS-R5F8:/volumel/screenpipes g1tYour branch is un to date with 'oriain/master'> OUTLINE1 TIMELINESSH: nas@0A0 0-rихгихrиx 1 Admin admin100% 152Fri 24 Apr 20:11:46• gitea.com/lakylak/screenpipe~[Soogle GeminiIssuesPull RequestsMIlestonesExplore• lakvlak /screenpine Private<> Code• Issues1? Pull Requests• Actions1'1 Projects• Releases•8 Wiki"V ACLIVILYo1 commit98 1 Branchmaster+Go to fileR? Lukas Kovalik b99c17ea4e Initial commit - screenpipe dashboard app, sync script, and pipes ...aopInitial commit — screenbioe dashboard apo, sunc scriot, and oioes.pipesInitial commit - screenpipe dashboard app, sync script, and pipesaitianoreInitial commit — screenpine dashboard app. svnc scriot, and pipes=screenpipe_sync.shInitial commit - screenpipe dashboard app, sync script, and pipes• 0 TagsAdd File+Code +37 minutes ago37 minutes aao37 minutes agoSminutes ado37 minutes ago• Unwatch* Star ForkY SettingsSearch code.DescriptionNo descriotion orovidedManace Tonicd₴ 76 KiBLancuacesO HTML 45.9%• Python 44.3%• Shell 9.7%• Dockerfile 0.1%Summarize pagePowered bv Gite.• Auto @ FnalishLicenses...
|
NULL
|
|
79802
|
2079
|
6
|
2026-04-24T17:11:46.356235+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050706356_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Activity MonitorFileEditViewWindowHelp(23APP (-zsh Activity MonitorFileEditViewWindowHelp(23APP (-zsh)APP (-zsh)DOCKERDEV (-zsh)882*3What's next:Try Dockerseamless, persistent debugging tools in any containeror image + docker debugdocker_1amp_1at [URL_WITH_CREDENTIALS] (JY-20508-notify-before-AJ-report-expiration) $ csfixdocker exec-it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.php-v--using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski andcontributors.PHPruntime:8.3.30Running analysis on 7 coreswith 10 files perprocess.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loaded config default from".php-cs-fixer.dist.php".5623/5623100%1) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-40,7 +40,7AutomatedReportsRepository SautomatedReportsRepository,UserPilotClient SuserPilotClient): void {Suser= User::find(143);Suser = User::find(143);////Scount = SautomatedReportsRepository->countUserReports(Suser);Sthis->info("Count: {Scount}");Scount = SautomatedReportsRepository->countAllUserReports(Suser);end diffscreenpipe"₴4100% C8Fri 24 Apr 20:11:45-zshT₴1|*5APPFixed 1 of 5623 files in 148.623 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any container or image » docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20508-notify-before-AJ-report-expiration) $ I...
|
NULL
|
-702329237649207776
|
NULL
|
click
|
ocr
|
NULL
|
Activity MonitorFileEditViewWindowHelp(23APP (-zsh Activity MonitorFileEditViewWindowHelp(23APP (-zsh)APP (-zsh)DOCKERDEV (-zsh)882*3What's next:Try Dockerseamless, persistent debugging tools in any containeror image + docker debugdocker_1amp_1at [URL_WITH_CREDENTIALS] (JY-20508-notify-before-AJ-report-expiration) $ csfixdocker exec-it docker_lamp_1./vendor/bin/php-cs-fixer fix--config=.php-cs-fixer.dist.php-v--using-cache=no --diffPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski andcontributors.PHPruntime:8.3.30Running analysis on 7 coreswith 10 files perprocess.Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!Loaded config default from".php-cs-fixer.dist.php".5623/5623100%1) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-40,7 +40,7AutomatedReportsRepository SautomatedReportsRepository,UserPilotClient SuserPilotClient): void {Suser= User::find(143);Suser = User::find(143);////Scount = SautomatedReportsRepository->countUserReports(Suser);Sthis->info("Count: {Scount}");Scount = SautomatedReportsRepository->countAllUserReports(Suser);end diffscreenpipe"₴4100% C8Fri 24 Apr 20:11:45-zshT₴1|*5APPFixed 1 of 5623 files in 148.623 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any container or image » docker debug docker_lamp_1Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20508-notify-before-AJ-report-expiration) $ I...
|
NULL
|
|
79801
|
2079
|
5
|
2026-04-24T17:11:38.886047+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050698886_m1.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"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},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.016666668,"top":0.0,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.16666667,"top":0.0,"width":0.11180556,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.17847222,"top":0.0,"width":0.088194445,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.453125,"top":0.0,"width":0.078819446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79799
|
|
79800
|
2080
|
6
|
2026-04-24T17:11:38.479707+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-24/1777 /Users/lukas/.screenpipe/data/data/2026-04-24/1777050698479_m2.jpg...
|
Firefox
|
lakylak/screenpipe - screenpipe - Gitea: Git with lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea — Personal...
|
1
|
gitea.com/lakylak/screenpipe
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.23287898,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"5 Signs You Have Successfully Hurt a Narcissist; - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.26961437,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.30618352,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.23105054,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.2443484,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.23105054,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.2443484,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.23105054,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.2443484,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.23105054,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.2443484,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.23105054,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.2443484,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.23105054,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.2443484,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.23105054,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.2443484,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.23105054,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.2443484,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.23105054,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.2443484,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.23105054,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.2443484,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.23105054,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.2443484,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.23105054,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.2443484,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.23105054,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.2443484,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.23105054,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.2443484,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.3324468,"top":0.5602554,"width":0.007978723,"height":0.01915403},"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.23387633,"top":0.58739024,"width":0.108211435,"height":0.025538707},"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.23387633,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.24484707,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.25598404,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.26712102,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.27825797,"top":0.97007185,"width":0.010638298,"height":0.025538707},"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.44980052,"top":0.055067837,"width":0.010638298,"height":0.025538707},"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.46176863,"top":0.055067837,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.35006648,"top":0.95730245,"width":0.053523935,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.35571808,"top":0.96249,"width":0.042220745,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dashboard","depth":7,"bounds":{"left":0.48387632,"top":0.057063047,"width":0.01861702,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Issues","depth":7,"bounds":{"left":0.5041556,"top":0.057063047,"width":0.022273935,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":8,"bounds":{"left":0.5084774,"top":0.06464485,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":7,"bounds":{"left":0.5280917,"top":0.057063047,"width":0.037732713,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":8,"bounds":{"left":0.53241354,"top":0.06464485,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Milestones","depth":7,"bounds":{"left":0.5674867,"top":0.057063047,"width":0.03174867,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Milestones","depth":8,"bounds":{"left":0.5718085,"top":0.06464485,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Explore","depth":7,"bounds":{"left":0.6008976,"top":0.057063047,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Explore","depth":8,"bounds":{"left":0.6052194,"top":0.06464485,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Notifications","depth":7,"bounds":{"left":0.938996,"top":0.057063047,"width":0.013962766,"height":0.028731046},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"lakylak","depth":7,"bounds":{"left":0.5382314,"top":0.105347164,"width":0.018284574,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak","depth":8,"bounds":{"left":0.5382314,"top":0.104948126,"width":0.018284574,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":7,"bounds":{"left":0.55767953,"top":0.104948126,"width":0.0018284575,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe","depth":7,"bounds":{"left":0.56067157,"top":0.105347164,"width":0.031083776,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe","depth":8,"bounds":{"left":0.56067157,"top":0.104948126,"width":0.031083776,"height":0.01715882},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Private","depth":8,"bounds":{"left":0.59674203,"top":0.10734238,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RSS Feed","depth":7,"bounds":{"left":0.8259641,"top":0.101356745,"width":0.01512633,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Unwatch","depth":8,"bounds":{"left":0.8434175,"top":0.101356745,"width":0.034075797,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1","depth":8,"bounds":{"left":0.8771609,"top":0.101356745,"width":0.0068151597,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":9,"bounds":{"left":0.87948805,"top":0.10654429,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Star","depth":8,"bounds":{"left":0.8863032,"top":0.101356745,"width":0.024601065,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.9105718,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.91289896,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fork","depth":10,"bounds":{"left":0.93201464,"top":0.10694334,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0","depth":8,"bounds":{"left":0.94547874,"top":0.101356745,"width":0.0076462766,"height":0.023942538},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":9,"bounds":{"left":0.9478058,"top":0.10654429,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":9,"bounds":{"left":0.5275931,"top":0.12849163,"width":0.026761968,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":11,"bounds":{"left":0.53856385,"top":0.1376696,"width":0.011801862,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Issues","depth":9,"bounds":{"left":0.554355,"top":0.12849163,"width":0.02925532,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Issues","depth":11,"bounds":{"left":0.56515956,"top":0.1376696,"width":0.013630319,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull Requests","depth":9,"bounds":{"left":0.58361036,"top":0.12849163,"width":0.04537899,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull Requests","depth":11,"bounds":{"left":0.5945811,"top":0.1376696,"width":0.029089095,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":9,"bounds":{"left":0.62898934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":11,"bounds":{"left":0.6399601,"top":0.1376696,"width":0.016123671,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Projects","depth":9,"bounds":{"left":0.6609042,"top":0.12849163,"width":0.033410903,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Projects","depth":11,"bounds":{"left":0.671875,"top":0.1376696,"width":0.017453458,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":9,"bounds":{"left":0.69431514,"top":0.12849163,"width":0.03507314,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":11,"bounds":{"left":0.7052859,"top":0.1376696,"width":0.019115692,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":9,"bounds":{"left":0.7293883,"top":0.12849163,"width":0.024601065,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":11,"bounds":{"left":0.74035907,"top":0.1376696,"width":0.008976064,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activity","depth":9,"bounds":{"left":0.75398934,"top":0.12849163,"width":0.031914894,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activity","depth":11,"bounds":{"left":0.7649601,"top":0.1376696,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":9,"bounds":{"left":0.9193817,"top":0.12849163,"width":0.03374335,"height":0.033519555},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":11,"bounds":{"left":0.9303524,"top":0.1376696,"width":0.017785905,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Commit","depth":9,"bounds":{"left":0.52792555,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.57546544,"top":0.1811652,"width":0.0023271276,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Commit","depth":10,"bounds":{"left":0.5789561,"top":0.1811652,"width":0.01662234,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"1 Branch","depth":9,"bounds":{"left":0.63680184,"top":0.17478053,"width":0.1087101,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":11,"bounds":{"left":0.68517286,"top":0.1811652,"width":0.0021609042,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Branch","depth":10,"bounds":{"left":0.68849736,"top":0.1811652,"width":0.01512633,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"0 Tags","depth":9,"bounds":{"left":0.74551195,"top":0.17478053,"width":0.10887633,"height":0.026336791},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":11,"bounds":{"left":0.7960439,"top":0.1811652,"width":0.0029920214,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tags","depth":10,"bounds":{"left":0.80019945,"top":0.1811652,"width":0.010139627,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"master","depth":12,"bounds":{"left":0.5390625,"top":0.21348763,"width":0.015625,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Pull Request","depth":8,"bounds":{"left":0.56549203,"top":0.20830008,"width":0.015957447,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Go to file","depth":10,"bounds":{"left":0.71758646,"top":0.20830008,"width":0.06781915,"height":0.023942538},"help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":8,"bounds":{"left":0.82047874,"top":0.20830008,"width":0.034242023,"height":0.023942538},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":10,"bounds":{"left":0.83211434,"top":0.21348763,"width":0.011469414,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":12,"bounds":{"left":0.54022604,"top":0.24940144,"width":0.030418882,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"b99c17ea4e","depth":10,"bounds":{"left":0.57297206,"top":0.24740623,"width":0.030086435,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"b99c17ea4e","depth":11,"bounds":{"left":0.5749667,"top":0.25059855,"width":0.026097074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":13,"bounds":{"left":0.60538566,"top":0.2509976,"width":0.14228724,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"...","depth":11,"bounds":{"left":0.74900264,"top":0.25059855,"width":0.008477394,"height":0.014365523},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"37 minutes ago","depth":11,"bounds":{"left":0.81798536,"top":0.25019953,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":11,"bounds":{"left":0.53889626,"top":0.2801277,"width":0.008144947,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":12,"bounds":{"left":0.53889626,"top":0.28132483,"width":0.008144947,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.28132483,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.28132483,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipes","depth":11,"bounds":{"left":0.53889626,"top":0.30965683,"width":0.011635638,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipes","depth":12,"bounds":{"left":0.53889626,"top":0.31085396,"width":0.011635638,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.31085396,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.31085396,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":".gitignore","depth":11,"bounds":{"left":0.53889626,"top":0.33918595,"width":0.020279255,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":".gitignore","depth":12,"bounds":{"left":0.53889626,"top":0.34038308,"width":0.020279255,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.34038308,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.34038308,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe_sync.sh","depth":11,"bounds":{"left":0.53889626,"top":0.36871508,"width":0.042719416,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":12,"bounds":{"left":0.53889626,"top":0.3699122,"width":0.042719416,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":11,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initial commit — screenpipe dashboard app, sync script, and pipes","depth":12,"bounds":{"left":0.6459442,"top":0.3699122,"width":0.14245346,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"37 minutes ago","depth":12,"bounds":{"left":0.81798536,"top":0.3699122,"width":0.03307846,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search code…","depth":9,"bounds":{"left":0.8600399,"top":0.17398244,"width":0.08211436,"height":0.028332002},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search…","depth":9,"bounds":{"left":0.9421542,"top":0.17398244,"width":0.010970744,"height":0.028332002},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Description","depth":8,"bounds":{"left":0.8600399,"top":0.21069433,"width":0.029089095,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No description provided","depth":9,"bounds":{"left":0.8600399,"top":0.23543495,"width":0.054853722,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Manage Topics","depth":8,"bounds":{"left":0.8600399,"top":0.26735833,"width":0.054853722,"height":0.011173184},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"76","depth":10,"bounds":{"left":0.86768615,"top":0.2905028,"width":0.006150266,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KiB","depth":9,"bounds":{"left":0.87616354,"top":0.2905028,"width":0.007480053,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Languages","depth":8,"bounds":{"left":0.8600399,"top":0.33559456,"width":0.027593086,"height":0.015163607},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HTML","depth":9,"bounds":{"left":0.86818486,"top":0.3850758,"width":0.013297873,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"45.9%","depth":8,"bounds":{"left":0.88264626,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Python","depth":9,"bounds":{"left":0.9070811,"top":0.3850758,"width":0.015957447,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"44.3%","depth":8,"bounds":{"left":0.92420214,"top":0.3850758,"width":0.013962766,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shell","depth":9,"bounds":{"left":0.86818486,"top":0.40901837,"width":0.011136968,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.7%","depth":8,"bounds":{"left":0.88048536,"top":0.40901837,"width":0.010638298,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dockerfile","depth":9,"bounds":{"left":0.9015958,"top":0.40901837,"width":0.023105053,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1%","depth":8,"bounds":{"left":0.92586434,"top":0.40901837,"width":0.010305851,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by Gitea","depth":8,"bounds":{"left":0.4872008,"top":0.9776536,"width":0.037732713,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by Gitea","depth":9,"bounds":{"left":0.4872008,"top":0.9788508,"width":0.037732713,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Licenses","depth":8,"bounds":{"left":0.9527925,"top":0.9776536,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Licenses","depth":9,"bounds":{"left":0.9577792,"top":0.9788508,"width":0.018949468,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API","depth":8,"bounds":{"left":0.98138297,"top":0.9776536,"width":0.012134309,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API","depth":9,"bounds":{"left":0.98636967,"top":0.9788508,"width":0.0071476065,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5878930124418572902
|
6401223383652521933
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
5 Signs You Have Successfully Hur DXP4800PLUS-B5F8
5 Signs You Have Successfully Hurt a Narcissist; - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Summarize page
Summarize page
Dashboard
Issues
Issues
Pull Requests
Pull Requests
Milestones
Milestones
Explore
Explore
Notifications
lakylak
lakylak
/
screenpipe
screenpipe
Private
RSS Feed
Unwatch
1
1
Star
0
0
Fork
0
0
Code
Code
Issues
Issues
Pull Requests
Pull Requests
Actions
Actions
Projects
Projects
Releases
Releases
Wiki
Wiki
Activity
Activity
Settings
Settings
1 Commit
1
Commit
1 Branch
1
Branch
0 Tags
0
Tags
master
New Pull Request
Go to file
Code
Code
Lukas Kovalik
b99c17ea4e
b99c17ea4e
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
...
37 minutes ago
app
app
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
pipes
pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
.gitignore
.gitignore
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
screenpipe_sync.sh
screenpipe_sync.sh
Initial commit — screenpipe dashboard app, sync script, and pipes
Initial commit — screenpipe dashboard app, sync script, and pipes
37 minutes ago
Search code…
Search…
Description
No description provided
Manage Topics
76
KiB
Languages
HTML
45.9%
Python
44.3%
Shell
9.7%
Dockerfile
0.1%
Powered by Gitea
Powered by Gitea
Licenses
Licenses
API
API...
|
79798
|